Jinja2 возвращает строку «Нет» для моделей приложений Google App
-
01-10-2019 - |
Вопрос
Модели Google App Engine, Likeso:
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
Настройка напечатана следующее:
Имя этого М - нет.
Предпочтительный и ожидаемый вывод (и выход при использовании шаблонов Django) будет / есть:
Название этого M есть.
Знаете ли вы, почему это происходит, и как получить предпочтительный и ожидаемый вывод?
Решение
Вы можете также захотеть рассмотреть возможность использования 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
Другие советы
Я думаю, что вы ударили на ответ сами. Если вы не укажете имя для этого свойства, App Engine, по-видимому, хранит его не так, а не «», поэтому, когда он напечатан, он напечатан как «Нет». Укажите значение по умолчанию как «», и ваша проблема уходит, как вы сказали.
Что, если он не хочет пустой строки, чтобы быть значением по умолчанию?
У меня есть этот вопрос сам. Я не хочу там пустую струну. Я хочу нулевой / нет / nonetype. Это не то же самое, что пустая строка.
Поэтому я снова поставил вопрос ко всем --- Jinja настаивает на перевод "нет". Что дает?