2012-02-16 9 views
2

タグにエンドブロックがあるかどうかをチェックする方法があるかどうかは疑問でした。私は基本的には例外が発生しますそのないが、その場合、私が見たユーザーがdjangoカスタムタグのインラインまたはブロック

{% mytag 'a' 'b' 'c' %} 

または

{% mytag 'a' 'b' 'c' %} 
    <!-- other markup here --> 
{% end mytag %} 

をやらせるためにしようとしていますが、プログラム的に設定私のタグが安全に処理するためにどのような方法があります両方の状況?

答えて

3

終了タグまで解析し、見つからない場合は例外をキャッチすることができます。あなたはまた、別のmytagというノードに実行する場合は、停止することがあります:それは100%正しいです

def do_mytag_stuff(parser, token): 

    # Process your token however you need 
    mytag_args = token.split_contents() 

    try: 
     nodelist = parser.parse(('endmytag', 'mytag')) 
     token = parser.next_token() 
     if token.contents == 'endmytag': 
      # Found an ending tag, make a node for its contents 
      parser.delete_first_token() 
      return MyTagNode(nodelist, mytag_args) 

    except TemplateSyntaxError: 
     # Neither tag was found 
     pass 

    # So either there's no closing tag, or we met another mytag before a closing tag. 
    # Do whatever you would for a single tag here 
    return SingleMyTagNode(mytag_args) 

わからない場合は、うまくいけばそれが役立ちます。

+0

私の唯一の恐怖は、これが他の問題を隠すかもしれないということです。人が正しくDNEなどのテンプレートを含む何かを正しく入力しないのと同じように。 – Nix

+0

本当に、私は2つの同様のタグを持っていれば全員がきれいになると思います。 –

+0

これは実際にはもっと良い解決策かもしれませんし、論理を共有することもできるので、ちょうどファサードになるでしょう。 – Nix

関連する問題