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


191

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

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

var1을 컨텍스트에 넣지 않으면 작동합니다. Jinja2는 정의되지 않은 오류를 발생시킵니다. 말 {% if var1 == None %}하거나 비슷한 쉬운 방법이 있습니까?

답변:


335

Jinja2 템플릿 디자이너 문서에서 :

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

나는 이것이 사실이라고 생각하지만 내 검색어는 종종 그것을 반영하지 않습니다.
dannyman

17
또한 {% if variable is not defined %}역을 테스트하는 데 사용할 수 있습니다 .
pbaranay


1
{% if variable is defined and variable %}공허함을 점검 할 것입니다
Vivek

32

{% if variable is defined %}변수가 인 경우 true입니다 None.

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

{% if variable != None %}

정말 유일한 옵션입니다.


None 이 아닌 경우 variable에 항상 평가되는 True경우 {% if variable != None %}와 같습니다 {% if variable %}.
azalea

당신이 None소문자 사용 을 확인 하려면none {% if variable is not none %}
Felipe Alvarez

14

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

12

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

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

5

필요한 경우 기본 필터 사용을 고려하십시오. 예를 들면 다음과 같습니다.

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

또는 다음과 같이 "하드 코딩"된 하나 이상의 폴백 값을 사용하십시오.

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

1

{% if variable is defined %} 정의되지 않은 것을 확인하기 위해 작동합니다.

{% if not var1 %}변수를 False로 기본 설정하면 사용 하지 않아도됩니다.

class MainHandler(BaseHandler):
    def get(self):
        var1 = self.request.get('var1', False)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.