django - 我在 Django 模型类中定义了常量。如何访问模板中的常量?
问题描述
我有一个带有选择字段的模型类,其可能的值定义为常量,如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
给您的模板渲染上下文,或使用上下文处理器将其自动添加到您的模板上下文
更好的方法是向该类添加一个方法,因此您不需要Student
在模板中使用常量,例如:
class Student(models.Model):
...
@property
def is_freshman(self):
return self.year_in_school == self.FRESHMAN
并直接在您的模板中使用它:
{% if student.is_freshman %}
Welcome
{% endif %}
推荐阅读
- attributes - 在导出的 CSV 文件中显示产品属性代码的产品属性标签
- multithreading - OpenMP 并行用于 - 多个并行用于的 Vs。一个并行,其中包含多个 for
- javascript - 这可以使用正则表达式模式(捕获组)吗?
- javascript - 我在 shopify 中添加了两个自定义输入字段(宽度和高度),如何连接他们的自定义价格以添加到购物车?
- azure - 如何配置基于条件的管道 | Azure 管道
- django-rest-framework - DRF - 应用 TokenAuthentication 时如何允许未经授权的请求
- javascript - 如何在应用程序 webview 上向 body 标签添加类?
- swift - 如何在带有 Objective-C 代码的项目中使用 RxSwift?
- typescript - 无法在 Web 组件类中设置属性
- design-patterns - 混合应用程序的选项