我在 Django 模型 class 中定义了常量。如何访问模板中的常量?

I have constants defined in a Django model class. How can I access the constants in a template?

我有一个模型 class,其中有一个选择字段及其可能的值定义为常量,如 https://docs.djangoproject.com/en/3.0/ref/models/fields/#choices

中所推荐
class Student(models.Model):
    FRESHMAN = 'FR'
    SOPHOMORE = 'SO'
    JUNIOR = 'JR'
    YEAR_IN_SCHOOL_CHOICES = [
        (FRESHMAN, 'Freshman'),
        (SOPHOMORE, 'Sophomore'),
        (JUNIOR, 'Junior'),
    ]
    year_in_school = models.CharField(
        max_length=2,
        choices=YEAR_IN_SCHOOL_CHOICES,
        default=FRESHMAN,
    )

在常规 Python 代码中(例如在视图中),我可以像这样轻松地使用常量:

if my_student.year_in_school == Student.FRESHMAN:
    # do something

我的问题是:我也可以在模板中做这样的事情吗?像

{% if student.year_in_school == Student.FRESHMAN %}
    Welcome
{% endif %}

...如果我在模板中对值 'FR' 进行硬编码,则此方法有效,但这种做法违背了常量的目的...

(我正在使用 Python 3.7 和 Django 3.0)

模板无法获取这些值,除非明确地将它们传递给您的模板,如果您走这条路,您有两个选择:将 Student 传递给您的模板呈现上下文,或使用上下文处理器来自动将其添加到您的模板上下文中

更好的方法是向 class 添加方法,这样您的模板中就不需要 Student 常量,例如:

class Student(models.Model):
    ...
    @property
    def is_freshman(self):
        return self.year_in_school == self.FRESHMAN

并直接在您的模板中使用它:

{% if student.is_freshman %}
    Welcome
{% endif %}