python - jinja2-كيفية وضع كتلة في بيان if؟




python-2.7 if-statement flask (2)

أحاول استخدام ميزة لتحديد ما if يجب أن تملأ {% block content %} .

لدي base.html يحتوي على {% block content %} base.html ويمتد هذا القالب base.html . لذلك حاولت هذا:

{% extends "base.html" %}
{% if condition == True %}
    {% block content %}
    <div>blah blah blah blah</div>
    {% endblock content %}
{% endif %}

وكنت أتوقع أن أرى blah blah blah blah إذا كان الشرط صحيحًا وانظر إلى الكتلة الافتراضية إذا لم تكن صحيحة.

ولكن في كل مرة حصلت blah blah blah blah .

ثم جربت هذا:

{% extends "base.html" %}
{% if condition == True %}
    {% block content %}
    <div>blah blah blah blah</div>
    {% endblock content %}
{% else %}
    {% block content %}
    <div>The Default Thing</div>
    {% endblock content %}
{% endif %}

ولدي هذا الخطأ:

TemplateAssertionError: block 'content' defined twice

كيف يمكنني وضع كتلة داخل بيان if ؟


Answers

لا يمكنك إنشاء شرط {% block %} شرطي ؛ بمجرد استخدام العلامة ، سيتم ملء الكتلة دائمًا.

ضع الشرطي الخاص بك داخل الكتلة بدلاً من ذلك ، واستخدم super() لإرشاد Jinja لاستخدام المحتويات الأصلية للكتلة كما هو موضح في القالب:

{% extends "base.html" %}
{% block content %}
    {% if condition %}
        <div>blah blah blah blah</div>
    {% else %}
        {{ super() }}
    {% endif %}
{% endblock content %}

في Python3 ، يدعم exist_ok وضع exist_ok . الإعداد الافتراضي هو False ، مما يعني أنه سيتم رفع OSError إذا كان الدليل الهدف موجودًا بالفعل. بواسطة exist_ok إلى True ، سيتم تجاهل OSError (الدليل موجود) ولن يتم إنشاء الدليل.

os.makedirs(path,exist_ok=True)

في Python2 ، لا يدعم exist_ok وضع exist_ok . يمكنك استخدام النهج في الإجابة heikki-toivonen :

import os
import errno

def make_sure_path_exists(path):
    try:
        os.makedirs(path)
    except OSError as exception:
        if exception.errno != errno.EEXIST:
            raise




python python-2.7 if-statement flask jinja2