У меня есть константы, определенные в классе модели 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)


person spst    schedule 24.05.2020    source источник


Ответы (1)


У шаблонов нет способа получить эти значения, кроме явной передачи их в ваш шаблон, если вы пойдете по этому пути, у вас есть два варианта: передать Student в контекст рендеринга вашего шаблона или использовать контекстные процессоры для автоматического добавления его в контекст вашего шаблона.

Лучшим подходом было бы добавить метод к этому классу, поэтому вам не нужны Student константы в вашем шаблоне, например:

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

и используйте его прямо в своем шаблоне:

{% if student.is_freshman %}
    Welcome
{% endif %}
person ahmed    schedule 24.05.2020
comment
Спасибо! Я решил использовать этот подход, и он меня пока не подвел :) - person spst; 15.06.2020