كتل متعددة من نفس الاسم في Jinja2
سؤال
في jinja2., ، لدي قالب قاعدة مثل هذا:
<title>{% block title %}{% endblock %} - example.com</title>
[...]
<h1>
{% block title %}{% endblock %} - example.com
</h1>
JINJA2، ثم، فشل مع الرسالة التالية:
lines = [self.message, ' ' + location]
: block 'title' defined twice
يجب أن يكون الآن واضحا لما أحاول القيام به - أن يكون لها نفس العنوان في مكانين: علامة العنوان وعلامة H1، ولكن يتم توفير جزء من العنوان بالفعل بواسطة قوالب مشتقة أخرى.
كيف يحقق المرء عادة هذا؟
المحلول
كما هو موثق هنا, ، تحديد كتلة ينشئ ماكرو باسم الكتلة كائن "الذاتي" الخاص:
<title>{% block title %}{% endblock %} - example.com</title>
[...]
<h1>
{{ self.title() }} - example.com
</h1>
نصائح أخرى
هذه الفكرة هي إنشاء كتلة داخل ماكرو ثم استدعاء ماكرو مرتين، بدلا من وجود علامة "كتلة" تتكرر مرتين.
في أحدث إصدار Jinja2 هذا يعمل:
layout.html.
{%- extends "base.html" -%}
{%- macro duplicated() -%}
{% block overrideninchild %}{% endblock %}
{%- endmacro -%}
{% block base_content %}
{{ duplicated() }}
{{ duplicated() }}
{% endblock %}
child_page.html.
{%- extends "layout.html" -%}
{% block overrideninchild %}
Should be visible twice.
{% endblock %}
لا تنتمي إلى StackOverflow