控制Django模板语言中的流程

时间:2012-07-13 03:22:52

标签: python django django-templates

我有以下代码,写在Django模板中。

{% if user.is_authenticated %}
    <div style="float: right;">
    {% for rel in RELATIONS %}
        {% if rel.group_id == g.id %}
            <a href="/group/{{ g.id }}/unsubscribe/" class="form-button">Unsubscribe</a>
        {% endif %}
    {% else %}
        <a href="/group/{{ g.id }}/subscribe/" class="form-button">Enrol</a>
    {% endfor %}
    </div>
{% endif %}

代码的目的是检查是否匹配,然后打印出取消订阅标记。如果不匹配则打印出订阅标记。

我无法做到这一点的原因是因为你在Django模板中,我读到你不能拥有变量(即真或假)。

更新:(问题)

我想只打印一次Unsubscribe / subscribe按钮。仅当for循环内部存在匹配时才打印取消订阅按钮。否则,如果没有匹配则打印出订阅按钮(即rel.group_id == g.id完全不匹配)

更新2:

在早些时候进行一些研究时我发现了这一点:https://code.djangoproject.com/ticket/3481 这可能会为我的问题添加一些上下文。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

好像你的if / else / endif混在了一起。尝试

{% if user.is_authenticated %}
    <div style="float: right;">
    {% for rel in RELATIONS %}
        {% if rel.group_id == g.id %}
            <a href="/group/{{ g.id }}/unsubscribe/" class="form-button">Unsubscribe</a>
        {% else %}
            <a href="/group/{{ g.id }}/subscribe/" class="form-button">Enrol</a>
        {% endif %}
    {% endfor %}
    </div>
{% endif %}

<强>更新

您想要检查g是否在relations,并根据这个做出决定。
我通常解决这个问题的方法是在我的视图中创建一个函数来执行此检查并将allong传递给视图。看看here