#django #enums #django-templates #templatetags
#django #перечисления #django-шаблоны #templatetags
Вопрос:
Я пытаюсь отобразить имя перечисления в шаблоне.Чтобы было понятно, у меня есть класс, подобный enum, в model.py
class EmployerWorkerNumberRange():
R_0 = 0
R_1_5 = 1
R_6_15 = 2
UNKNOWN = 3
EMPLOYER_WORKER_NUMBER_RANGE =(
(R_0,_("wnr_0")),
(R_1_5 ,_("wnr_1_5")),
(R_6_15,_("wnr_6_15")),
(UNKNOWN,_("UnknownWorkerNumberRange")),
)
Когда я использую его в форме, подобной
wnr = forms.ChoiceField(label=_("emp_full_reg_wnr"), required=True, choices=EmployerWorkerNumberRange.EMPLOYER_WORKER_NUMBER_RANGE)
это отлично работает.(Заполняет выпадающий список переведенными значениями, и когда я получаю выбранный элемент, получается просто идентификатор)
Мой вопрос в том, как я могу показать любое переведенное значение в моем шаблоне, указав его идентификатор. Например, я хотел бы использовать это EmployerWorkerNumberRange.EMPLOYER_WORKER_NUMBER_RANGE[0]
Не могли бы вы предложить мне какой-либо способ?
Спасибо
Ответ №1:
Чтобы отобразить значение поля, доступное для чтения человеком, используйте get_$var_display()
метод (созданный автоматически для всех полей с choices
) на экземпляре модели. Для вашего примера это что-то вроде этого:
{{ company.get_wnr_display }}
Чтобы получить значение по индексу без экземпляра модели, самый простой способ — написать пользовательский фильтр, который преобразует индекс, хранящийся в переменной, в нужное значение:
{{ some_value|as_wnr_title }}
Комментарии:
1. Это работает идеально, спасибо! Есть ли какой-нибудь документ, который я могу прочитать о таких вещах? Я прочитал документацию django, но я не заметил такого использования..
2. Это все в документации django, возможно, вы просматривали неправильные разделы. Этот конкретный метод находится здесь: docs.djangoproject.com/en/1.3/ref/models/instances