在模板逻辑中使用Django选择

时间:2015-03-04 18:48:09

标签: django django-templates

我有一个模特,说:

from model_utils import Choices

class Day(models.Model):
    WEATHER = Choices(
        ('r', 'rainy', 'Rainy'),
        ('s', 'sunny', 'Sunny'),
    )
    weather = models.CharField(max_length=1, choices=WEATHER)

在演示文稿中,是否有办法使用逻辑关键字,例如:

{% ifequal monday.weather Day.WEATHER.rainy %}
It rained monday
{% endifequal %}

我知道get_FOO_display()方法,但宁愿不针对硬编码字符串进行测试(例如,monday.get_weather_display =='Rainy')。是否有模板标签或包含或某种方式来引用模型中的这种去除?或者至少是在模板中做出与选择相关的逻辑的最佳实践建议?我在文档中找不到任何证据,无法真正理解源代码,我在这里找到的所有问题都是寻找get_FOO_display方法的人。

感谢。

2 个答案:

答案 0 :(得分:2)

我会在模型中编写一个属性方法

class Day(models.Model):

    [...]

    @property
    def is_rainy(self):
        return self.weather == self.WEATHER.rainy

在我的模板中,我会检查:

{% if monday.is_rainy %}
    It rained monday
{% endif %}

答案 1 :(得分:0)

我(愚蠢地)已经在我的代码中实现了这个并忘记了它!根据我的例子,可以使用实例来引用选择的可能性:

{% if monday.weather == monday.WEATHER.rainy %}
[...]

我会删除这个问题,但事实仍然是在文档中没有很清楚地解释,并且似乎没有重复我在stackoverflow上找到的任何内容。