【问题标题】:django custom tag inline or blockdjango 自定义标签内联或块
【发布时间】:2012-03-08 01:01:46
【问题描述】:

我想知道是否有办法检查标签是否有结束块。我基本上是想让用户这样做

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

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

我看到如果它不存在它会引发异常,但是有没有办法以编程方式设置我的标签以安全地处理这两种情况?

【问题讨论】:

    标签: django google-app-engine django-templates


    【解决方案1】:

    您可以尝试解析直到结束标记,如果未找到则捕获异常。如果您还遇到另一个 mytag 节点,您可能想要停止:

    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)
    

    不确定这是否 100% 正确,但希望它会有所帮助。

    【讨论】:

    • 我想我唯一担心的是这可能会掩盖其他问题。就像人们没有正确输入内容一样,包括 DNE 的模板等。
    • 非常正确,我认为只有两个相似的标签会更干净。
    • 这实际上可能是一个更好的解决方案,他们可以共享逻辑,所以它只是一个门面。
    • 我接受了,但我认为更好的解决方案是公开两个标签更改 except 以检查“预期的 endmytag 或我的标签”。它会阻止我们隐藏与我的标签无关的编译异常。
    猜你喜欢
    • 1970-01-01
    • 2012-07-07
    • 2011-01-02
    • 2012-12-22
    • 2010-10-10
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    相关资源
    最近更新 更多