如何在模板中进行特定检查后显示一次?

时间:2016-08-04 21:24:44

标签: django django-templates

我需要这个原则才能发挥作用:

{% for a in activites %}
    {% if not a.is_on_top %}
        {% if not "form is displayed" %} <- how to do this?
            Display the form
            {% assign a boolean "form is displayed" %} <- how to do this?
        {% endif %}
    {% else %}
        display a lot of stuff
    {% endif %}
{% endfor %}

2 个答案:

答案 0 :(得分:0)

我不认为你可以用香草标签做到这一点(但我会很高兴证明不是这样):

  

如果你有编程背景,或者你已经习惯了   将编程代码直接混合到HTML中的语言,你会想要的   要记住,Django模板系统不仅仅是Python   嵌入到HTML中。这是设计:模板系统的意思   表达,不是程序逻辑

但是,您可以使用自定义from django import template class AssignNode(template.Node): def __init__(self, name, value): self.name = name self.value = value def render(self, context): context[self.name] = self.value.resolve(context, True) return '' def do_assign(parser, token): """ Assign an expression to a variable in the current context. Syntax:: {% assign [name] [value] %} Example:: {% assign list entry.get_related %} """ bits = token.contents.split() if len(bits) != 3: raise template.TemplateSyntaxError("'%s' tag takes two arguments" % bits[0]) value = parser.compile_filter(bits[2]) return AssignNode(bits[1], value) register = template.Library() register.tag('assign', do_assign) 代码:

{{1}}

(采取形式here

Here是Django关于自定义标签的文档。

答案 1 :(得分:0)

您可以通过变量forloop.first实现此逻辑,该变量可用于for循环。

例如:

{% if forloop.first %}
    Display the form
{% endif %}