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

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

{{cat}} chases {{mouse}}

, если и кошка, и мышь имеют значение None, он будет отображаться как:

None chases None

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

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

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

Ответы [ 3 ]

38 голосов
/ 29 сентября 2011

Таких вещей не существует. Вот почему существуют фильтры default и default_if_none. Это функция ; это заставляет вас думать о том, что вы делаете, вместо того, чтобы полагаться на какое-то поведение, которое часто вводит в заблуждение. Если есть вероятность того, что переменная будет None, то вы должны запланировать эту непредвиденную ситуацию. Если переменная всегда должна иметь какое-то значение , то "None" означает, что что-то не так. Если бы по умолчанию было просто отображать пустую строку, вы бы не знали, не является ли значение не определенным или фактически является пустой строкой. Напишите связный код и забудьте о ярлыках.

4 голосов
/ 29 сентября 2011

«Явное лучше, чем неявное»

Подумайте о том, как вы были бы взбешены, когда вещи не отображались должным образом, потому что вы забыли, что включили магический параметр «рендеринг всего с ложным значением в виде пустой строки».

Если вы обнаружите, что вы часто используете фильтр default_if_none, вы можете подумать о том, чтобы изменить приведение None к '' ДО того, как оно будет передано в шаблон.

Ваш шаблон будет проще, и вы явно примете это решение для строковых значений NULL.

3 голосов
/ 20 июля 2012

Это должно сработать, поместить его где-нибудь в код инициализации, например.в 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
...