Jinja2 возвращает строку «Нет» для моделей приложений Google App

StackOverflow https://stackoverflow.com/questions/2695180

Вопрос

Модели 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 настаивает на перевод "нет". Что дает?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top