В Jinja2, как вы тестируете, если переменная не определена?

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

  •  27-09-2019
  •  | 
  •  

Вопрос

Преобразование из Джанго, я привык делать что-то подобное:

{% if not var1 %} {% endif %}

И имея это работать, если я не поставил VAR1 в контекст. Jinja2 дает мне неопределенную ошибку. Есть ли простой способ сказать {% if var1 == None %} или похожие?

Это было полезно?

Решение

От jinja2. Шаблон дизайнерской документации:

{% if variable is defined %}
    value of variable: {{ variable }}
{% else %}
    variable is not defined
{% endif %}

Другие советы

{% if variable is defined %} верно, если переменная None.

С not is None не разрешено, это означает, что

{% if variable != None %}

действительно ваш единственный вариант.

В настройке окружающей среды мы имели undefined = StrictUndefined, что препятствовало неопределенным ценностям из чего угодно. Это исправило это:

from jinja2 import Undefined
JINJA2_ENVIRONMENT_OPTIONS = { 'undefined' : Undefined }

Вы также можете определить переменную в шаблоне Jinja2, как это:

{% if step is not defined %}
{% set step = 1 %}
{% endif %}

И тогда вы можете использовать это так:

{% if step == 1 %}
<div class="col-xs-3 bs-wizard-step active">
{% elif step > 1 %}
<div class="col-xs-3 bs-wizard-step complete">
{% else %}
<div class="col-xs-3 bs-wizard-step disabled">
{% endif %}

В противном случае (если вы не использовали {% set step = 1 %}) Верхний код бросит:

UndefinedError: 'step' is undefined

Рассмотрим использование фильтра по умолчанию, если это то, что вам нужно. Например:

{% set host = jabber.host | default(default.host) -%}

Или используйте более затруднительные значения с помощью «Харкодированного», в конце типа:

{% set connectTimeout = config.stackowerflow.connect.timeout | default(config.stackowerflow.timeout) | default(config.timeout) | default(42) -%}

{% if variable is defined %} Работает для проверки, если что-то неопределено.

Вы можете уйти с помощью {% if not var1 %} Если вы по умолчанию ваши переменные, например,

class MainHandler(BaseHandler):
    def get(self):
        var1 = self.request.get('var1', False)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top