Jinja2 возвращает строку «Нет» для моделей Google App Engine - PullRequest
2 голосов
/ 23 апреля 2010

Модели Google App Engine, Likeo:

from google.appengine.ext.db import Model

class M(Model):
    name = db.StringProperty()

Затем в шаблоне Jinja2, вызываемом из представления Django, с экземпляром M, переданным как m:

The name of this M is {{ m.name }}.

Когда m инициализируется без установки name, выводится следующее:

Имя этого M - Нет.

Предпочтительный и ожидаемый вывод (и вывод при использовании шаблонов Django) будет / равен:

Имя этого M есть.

Знаете ли вы, почему это происходит, и как получить предпочтительный и ожидаемый результат?

Ответы [ 3 ]

14 голосов
/ 13 декабря 2010

Вы также можете рассмотреть возможность использования Jinja2 "или" ...

The name of this M is {{ m.name or ''}}.

Если bool(m.name) == False, это покажет The name of this M is .


Если m.name == Falseи вы хотите отобразить его в виде строки «False», вы можете использовать фильтр Jinja2 «по умолчанию»:

The name of this M is {{ m.name|default('') }}

Если m.name is None, это покажет The name of this M is .

Если m.name == False, это покажет The name of this M is False.


Если вы хотите использовать фильтр по умолчанию и при этом все равно что значение False будет отображаться как ваше заданное значение по умолчанию, добавьте дополнительный параметр:

The name of this M is {{ m.name|default('', true) }}

Это должно иметь тот же эффект, что и {{ m.name or '' }}.


Вы можете найти всю эту информацию в справочнике по встроенным фильтрам Jinja2

1 голос
/ 14 ноября 2010

Что если он не хочет, чтобы пустая строка была значением по умолчанию?

У меня есть проблема сама. Я не хочу пустую строку там. Я хочу null / None / NoneType. Это не то же самое, что пустая строка.

Итак, я снова задаю вопрос всем - Джинджа настаивает на переводе «Нет». Что дает?

1 голос
/ 23 апреля 2010

Я думаю, что вы нашли ответ самостоятельно. Если вы не укажете имя для этого свойства, App Engine, по-видимому, сохранит его как None, а не как «», поэтому при печати оно печатается как «None». Укажите значение по умолчанию "", и ваша проблема исчезнет, ​​как вы сказали.

...