如何在模板中迭代Django CHOICES - 不使用表单或模型实例

时间:2012-06-28 10:06:13

标签: python django

我目前使用选项来定义月份列表和一周中的日期列表。

我想在模板中显示这些选项列表,而不必与特定实例或表单相关。

例如......

在我的模特中:

MONTH_CHOICES = (
    ('01', 'January'),
    ('02', 'February'),
    ('03', 'March'),
etc

DAY_CHOICES = (
    ('01', 'Monday'),
    ('02', 'Tuesday'),
    ('03', 'Wednesday'),
etc

class Item(models.Model):
    month = models.CharField(choices=MONTH_CHOICES)
    day = models.CharField(choices=DAY_CHOICES)

在我看来:

month_choices = MONTH_CHOICES

在我的模板中:

{% for month in month_choices %}
{{ month }}<br />
{% endfor %}

以上代码输出:

('01', 'January')
('02', 'February')
('03', 'March')

如何输出每个选项的名称(或值)?

或者,是否有更好的方法来记录模型的一个月和一周 - 以及稍后使用一个月和一天分组/呈现实例?

谢谢! :)

3 个答案:

答案 0 :(得分:11)

有更好的方法来做到这一点。

{% for value, text in form.[field_name].field.choices %}
    {{ value }}: {{ text }}
{% endfor %}

form是您传递给模板的表单变量。 [field_name]是您在模型中定义的字段名称。在这种情况下,&#39;月&#39;

答案 1 :(得分:7)

你可以在迭代时简单地解包元组:

{% for n, month in month_choices %}
{{ n }}, {{ month }}<br />
{% endfor %}

答案 2 :(得分:2)

{% for month in month_choices %}
{{ month.1 }}<br />
{% endfor %}

虽然在语义上你应该使用<ul><li>而不是<br>