【问题标题】:Django Template Language Variable UsageDjango 模板语言变量用法
【发布时间】:2013-05-12 01:08:11
【问题描述】:

我正在尝试在我的网页上显示一个表单。负责显示表单的部分模板文件如下所示:

{% for choice in poll.choice_set.all %}
<input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" />
{% count = 0 %}

{% if count == 0 %}
    <label class="right" for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br />
    {% count += 1 %}

{% elif count == 1 %}
    <label class="left" for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br />

{% endif %}

{% endfor %}

所以你可能会注意到我期待poll.choice_set.all 有两个选择。我的目标是以不同的方式显示两者(正如您从标签的类别中看到的那样)。所以我尝试这样做的方法是声明一个计数器,该计数器最初会以某种格式显示一个选项并递增计数器,然后以不同的格式显示第二个选项,因为count 已递增。

我很确定这是完全错误的,不能这样做。我想知道是否有人可以帮助我了解如何实现我想做的事情。

所以基本上我有一个有两个选择的投票对象。我希望每个选项以不同的方式显示(不同的 CSS 类)。

【问题讨论】:

  • Django 模板不允许变量赋值。换句话说,count += 1 永远不会起作用。
  • 这是一个相关的post
  • @almostflan 谢谢,正是我需要知道的。我最终使用了forloop.counter,一切都很好。 Django 的功能太多,而且文档巨大 ......即使是基本知识的一小部分也很难知道(无论如何对于初学者来说)。我猜只是需要练习。

标签: python django


【解决方案1】:

在这种特殊情况下,您似乎可以使用 forloop.counter 或 forloop.counter0,因为您假设的“选择”变量会在每次循环迭代时更改一次。你可以简化

{% for choice in poll.choice_set.all %}
    <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" />

    {% if forloop.counter0 == 0 %}
        <label class="right" for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br />

    {% elif forloop.counter0 == 1 %}
        <label class="left" for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br />

    {% endif %}
{% endfor %}

或者,如果你想要更短的代码,你可以这样做:

{% for choice in poll.choice_set.all %}
    <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" />
    <label class="{% cycle 'right' 'left' %}" for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br />

{% endfor %}

{% cycle "right" "left" %} 将在每次遇到该标签时在 "right" 和 "left" 作为类值之间切换,因此这将产生在 "right" 和如果您有超过 2 个选项,则为“左”。

【讨论】:

  • 太好了,谢谢。我同意你的第一个建议。我实际上注意到 forloop.counter 正在被使用,并很快想到我可以将其调整到我的场景中。你的回答再次证实了这一点。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-16
  • 2021-03-13
  • 2013-03-02
  • 2022-01-07
  • 2017-01-07
  • 2020-09-21
相关资源
最近更新 更多