【问题标题】:Using Django Choices in Template Logic在模板逻辑中使用 Django 选择
【发布时间】:2015-05-05 21:56:40
【问题描述】:

我有一个模型,比如说:

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 方法。

谢谢。

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

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

    class Day(models.Model):
    
        [...]
    
        @property
        def is_rainy(self):
            return self.weather == self.WEATHER.rainy
    

    在我的模板中我会检查:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 我仍然建议您将逻辑放在模型中而不是模板中。
      • 这可能是明智的做法,但是如果一个人有很多选择要检查或反对,这可能是站不住脚/混乱的......尽管我认为那时可能会有更大的问题。
      猜你喜欢
      • 1970-01-01
      • 2012-02-27
      • 2018-12-30
      • 2013-07-25
      • 2010-12-19
      • 2011-06-10
      • 2015-01-08
      • 2019-10-06
      • 2021-05-02
      相关资源
      最近更新 更多