سؤال

في 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 %}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top