Подтвердить что ты не робот

Настройка Django для вывода тега шаблона по умолчанию, когда переменная равна None?

Я ищу настройку django или программный способ сделать все теги шаблонов django отображающими пустую строку, когда значение равно None. Например, представьте, что у меня есть шаблон django:

{{cat}} chases {{mouse}}

Если обе мыши и мыши - None, это будет выглядеть как:

None chases None

Мне известно, что я могу установить каждый из них с помощью {{cat|default:""}} или {{mouse|default_if_none:""}}

Однако я ищу какую-то настройку, которая позволила бы мне установить значение по умолчанию для всех тегов без явного добавления |default:"" к каждому тегу.

Я также знаю настройку под названием TEMPLATE_STRING_IF_INVALID. Однако этот параметр применяется только к неверным строкам. Нет считается действительным.

4b9b3361

Ответ 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