我在 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 %}
我有一个模型 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 %}