2010-04-22 1 views
2

Google App модели двигателя, likeso:Jinja2 возвращает "Нет" строка для моделей Google App Engine

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) будут/есть:

Названия этого М.

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

+0

Стоит отметить, что установка значения по умолчанию, ала. 'name = db.StringProperty (default =" ")' разрешает эту проблему. Проблема заключается в том, что 'm.name' является NoneType, если нет значения по умолчанию. –

+0

Ваш класс должен подклассифицировать 'db.Model', например:' class M (db.Model): '- это что-то меняет? –

+0

@ Джейсон Холл - Спасибо за улов. К сожалению, это не касается проблемы. –

ответ

14

Вы могли бы также рассмотреть возможность использования 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.


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

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

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


Вы можете найти всю эту информацию на Jinja2's Builtin Filters reference

+0

Отличное предложение; спасибо, Jgeewax. –

1

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

+0

Следует отметить, что вы можете исправить эту проблему, перейдя в раздел 'class jinja2.Undefined'. –

1

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

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

Итак, я задал вопрос всем снова --- Jinja настаивает на переводе «None». Что дает?

+0

Я думаю, вы можете решить это, перегрузив 'jinja2.Undefined' и передав это как параметр' undefined' в '' jinja2.Environment'. –

+0

попробуйте использовать фильтр Jinja "default" – uralbash