জিনজা 2-তে, কোনও চলক অপরিজ্ঞাত থাকলে আপনি কীভাবে পরীক্ষা করবেন?


190

জাজানো থেকে রূপান্তরিত হয়ে, আমি এই জাতীয় কিছু করতে অভ্যস্ত:

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

এবং আমি যদি প্রসঙ্গের মধ্যে var1 না রাখি তবে এটি কাজ করে। জিনজা 2 আমাকে একটি অনির্ধারিত ত্রুটি দেয়। বলার {% if var1 == None %}মতো কোনও সহজ উপায় বা অনুরূপ কি?

উত্তর:


333

জিনজা 2 টেমপ্লেট ডিজাইনার ডকুমেন্টেশন থেকে :

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

আমি বিশ্বাস করি এটি ক্ষেত্রে হিসাবে তবে আমার অনুসন্ধানের শব্দগুলি প্রায়শই এটি প্রতিফলিত করে না।
ড্যানিম্যান

17
অতিরিক্তভাবে, আপনি {% if variable is not defined %}বিপরীত পরীক্ষা করতে ব্যবহার করতে পারেন ।
pbaranay

@ উদ্যানমান ০.০.০ থেকে
স্যামুয়েল হারমার

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 %}
আজালিয়া

আপনি যদি 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)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.