Настройка Django для вывода тега шаблона по умолчанию, когда переменная равна None?
Я ищу настройку django или программный способ сделать все теги шаблонов django отображающими пустую строку, когда значение равно None. Например, представьте, что у меня есть шаблон django:
{{cat}} chases {{mouse}}
Если обе мыши и мыши - None, это будет выглядеть как:
None chases None
Мне известно, что я могу установить каждый из них с помощью {{cat|default:""}}
или {{mouse|default_if_none:""}}
Однако я ищу какую-то настройку, которая позволила бы мне установить значение по умолчанию для всех тегов без явного добавления |default:""
к каждому тегу.
Я также знаю настройку под названием TEMPLATE_STRING_IF_INVALID
. Однако этот параметр применяется только к неверным строкам. Нет считается действительным.
Ответы
Ответ 1
Нет такой вещи. Вот почему существуют фильтры default
и default_if_none
, Это особенность; это заставляет задуматься о том, что вы делаете, вместо того, чтобы полагаться на какое-то поведение, которое часто вводит в заблуждение. Если существует вероятность того, что переменная будет None
, тогда вы должны планировать эту непредвиденную ситуацию. Если переменная всегда должна иметь некоторое значение, то "Нет" указывает на то, что что-то не так. Если по умолчанию нужно было просто отобразить пустую строку, вы не узнаете, не определено ли значение или на самом деле это пустая строка. Напишите когерентный код и забудьте о ярлыках.
Ответ 2
"Явный лучше, чем неявный"
Подумайте, насколько вы были бы в ярости, если бы вещи не отображались должным образом, потому что вы забыли, что вы включили настройку "показать все с ложным значением как нулевой строки".
Если вы обнаружите, что часто используете фильтр default_if_none
, вам может потребоваться изменить изменение None
на ''
, прежде чем оно будет передано шаблону.
Ваш шаблон будет проще, и у вас будет явно, чтобы это решение породило нулевые значения.
Ответ 3
Это должно сделать трюк, поместить его где-нибудь в код инициализации, например. в wsgi.py
# Patch template Variable to output empty string for None values
from django.template.base import Variable
_resolve_lookup = Variable._resolve_lookup
def new_resolve_lookup(self, *args, **kwargs):
o = _resolve_lookup(self, *args, **kwargs)
return o or u""
Variable._resolve_lookup = new_resolve_lookup