यदि एक चर अपरिभाषित है, तो आप जिन्जा 2 में कैसे परीक्षण करेंगे?


190

Django से परिवर्तित, मैं इस तरह से कुछ करने के लिए उपयोग कर रहा हूँ:

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

और यह काम कर रहा है अगर मैं संदर्भ में var1 नहीं रखा है। Jinja2 मुझे एक अपरिभाषित त्रुटि देता है। वहाँ कहने के लिए एक आसान तरीका है {% if var1 == None %}या समान है?

जवाबों:


333

Jinja2 टेम्पलेट डिजाइनर प्रलेखन से :

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

मेरा मानना ​​है कि यह मामला है लेकिन मेरे खोज शब्द अक्सर इस बात को प्रतिबिंबित नहीं करते हैं।
डेनिमैन

17
इसके अतिरिक्त, आप {% if variable is not defined %}व्युत्क्रम का परीक्षण करने के लिए उपयोग कर सकते हैं ।
परबनाय

@dannyman 0.2.0 के बाद से
सैमुअल

1
{% if variable is defined and variable %}शून्यता की भी जाँच करेंगे
विवेक

32

{% if variable is defined %}चर है तो सच है None

चूंकि not is Noneअनुमति नहीं है, इसका मतलब है कि

{% if variable != None %}

वास्तव में आपका एकमात्र विकल्प है।


यदि variableहमेशा मूल्यांकन किया जाता है Trueजब कोई नहीं, {% if variable != None %}के बराबर है {% if variable %}
Azalea

यदि आप Noneलोअरकेस का उपयोग करना चाहते हैंnone {% if variable is not none %}
फेलिप अल्वारेज़

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 %}यदि आप अपने चरों को गलत उदाहरण के लिए डिफ़ॉल्ट रूप से उपयोग कर पा सकते हैं

class MainHandler(BaseHandler):
    def get(self):
        var1 = self.request.get('var1', False)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.