【问题标题】:How can I access a Django model's Enum from within a template?如何从模板中访问 Django 模型的枚举?
【发布时间】:2015-07-29 05:29:23
【问题描述】:

我的Django模型类如下:

class MyClass(models.Model):
    CHOICE1 = "CHOICE1"
    CHOICE2 = "CHOICE2"

    FIELD_CHOICES = (
        (CHOICE1, CHOICE1),
        (CHOICE2, CHOICE2),
    )
    my_field = models.CharField(
        max_length=254,
        null=False,
        blank=False,
        choices=FIELD_CHOICES,
        default=CHOICE1,
    )

我将my_instance 传递给模板,它是MyClass 的一个实例。 如何在该模板中对 my_field 的可能值进行 if-else 检查?

我做了以下,但它不起作用:

{% if my_instance.my_field == my_instance.__class__.CHOICE1 %}
    <p>BLAH BLAH1</p>
{% elif my_instance.my_field == my_instance.__class__.CHOICE2 %}
    <p>BLAH BLAH2</p>
{% endif %}

编辑: 我可以将MyClass 类传递到模板上下文中,然后使用MyClass.CHOICEX。这样可行。但是除了实例之外还必须传入类本身似乎很浪费。我不能从实例中获取类然后使用CHOICEX吗?

【问题讨论】:

  • 使用自定义模板标签或传递选项来请求视图中的上下文
  • 我添加了一个编辑来解释更多。我可以在不向上下文传递任何额外内容的情况下做到这一点吗?
  • 是的。谢谢。那行得通。

标签: python django django-models enums django-templates


【解决方案1】:

您可以从实例中访问类变量:

{% if my_instance.my_field == my_instance.CHOICE1 %}
    <p>BLAH BLAH1</p>
{% elif my_instance.my_field == my_instance.CHOICE2 %}
    <p>BLAH BLAH2</p>
{% endif %}

查看this answer 了解有关类变量的更多信息。

【讨论】:

    猜你喜欢
    • 2016-06-27
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-20
    • 2020-11-29
    相关资源
    最近更新 更多