[jinja2] Jinja2에서 변수가 정의되어 있지 않은지 어떻게 테스트합니까?

장고에서 변환하면 다음과 같은 작업에 익숙합니다.

{% 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 %}변수가 인 경우 true입니다 None.

not is None허용되지 않기 때문에

{% if variable != None %}

정말 유일한 옵션입니다.


답변

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


답변

환경 설정에는 undefined = StrictUndefined정의되지 않은 값이 설정되지 않도록하는 기능이 있습니다. 이것은 그것을 고쳤다 :

from jinja2 import Undefined
JINJA2_ENVIRONMENT_OPTIONS = { 'undefined' : 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 %}변수를 False로 기본 설정하면 사용 하지 않아도됩니다.

class MainHandler(BaseHandler):
    def get(self):
        var1 = self.request.get('var1', False)


답변