【问题标题】:Control flow in Django template languageDjango 模板语言中的控制流
【发布时间】:2012-07-13 03:22:52
【问题描述】:

我有以下代码,写在 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 模板中,我读到您不能有变量(即 True 或 False)。

更新:(问题)

我只想打印一次取消订阅/订阅按钮。仅当 for 循环内有匹配项时才打印出取消订阅按钮。否则,如果不匹配则打印出订阅按钮(即 rel.group_id == g.id 根本不匹配)

更新 2:

在之前做一些研究时,我发现了这个:https://code.djangoproject.com/ticket/3481 这可能会给我的问题增加一些背景。

感谢您的帮助。

【问题讨论】:

  • 好的,我换个说法。

标签: python django django-templates


【解决方案1】:

似乎您的 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 中,并据此做出决定。
我通常解决这个问题的方法是在我的视图中创建一个函数来执行此检查并将其传递给视图。看看here

【讨论】:

  • 我需要检查多个关系。如果 rel 中有匹配项。 group_id == g.id 我想打印出取消订阅(即用户在组中)。如果 rel 中没有匹配项。 group_id == g.id,他们不在组中,因此将注册打印到组标签中。
  • 所以您还需要else if 语句(比已经存在的两个案例更多)?从我可以看到上面的代码完全符合你的描述。
  • 我只希望它打印一次,而不是多次。因此,当它检查每个 rel 并且没有匹配项时,它将每次打印出注册。我只希望它执行一次。
  • 另外,我知道他们搞混了,我试图做一个 for-else 循环,但它不在 Django 中
  • 这将为 RELATIONSHIPS 中的每个 rel 打印一个或另一个。 g 到底是什么?
猜你喜欢
  • 1970-01-01
  • 2010-12-26
  • 2017-01-07
  • 1970-01-01
  • 2019-08-01
  • 2010-11-30
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
相关资源
最近更新 更多