سؤال

أود تقديم نفس المحتوى داخل 2 قاعدة مختلفة من الملفات.

لذلك أنا أحاول أن أفعل هذا:

page1.html:

{% extends "base1.html" %}
{% include "commondata.html" %}

page2.html:

{% extends "base2.html" %} 
{% include "commondata.html" %}

المشكلة هي أنني لا أستطيع استخدام كل من تمتد و تشمل.هل هناك طريقة لفعل ذلك ؟ و إذا لم يكن كذلك ، كيف يمكن إنجاز أعلاه ؟

commondata.html يتجاوز كتلة المحدد في كل base1.html و base2.html

والغرض من هذا هو توفير نفس الصفحة في كل pdf و صيغة html ، حيث التنسيق هو مختلفة قليلا.السؤال أعلاه على الرغم من يبسط ما أحاول القيام بذلك إذا كنت أستطيع الحصول على إجابة إلى أنه سيتم حل مشكلتي.

هل كانت مفيدة؟

المحلول

عند استخدام تمتد العلامة القالب، كنت تقول أن القالب الحالي يمتد أخرى - وهذا هو القالب الطفل، التي تعتمد على قالب الأم. سوف جانغو ننظر في قالب طفلك واستخدام محتوياتها لملء الأم.

وكل ما تريد استخدامها في قالب الطفل يجب أن تكون ضمن كتل، والذي يستخدم جانغو لملء الأم. إذا كنت تريد استخدام عبارة include في ذلك القالب الطفل، لديك لوضعها داخل كتلة، لجانغو لفهم ذلك. وإلا فإنه فقط لا معنى له وجانغو لا أعرف ماذا أفعل معها.

والوثائق جانغو لديها عدد قليل من الأمثلة الجيدة حقا باستخدام كتل لاستبدال القطع في القالب الأم.

https://docs.djangoproject.com/en / ديف / المرجع / قوالب / اللغة / # قالب الميراث

نصائح أخرى

ومن مستندات جانغو:

<اقتباس فقرة>   

ووتشمل ينبغي النظر العلامة تنفيذا ل"جعل هذا subtemplate وتشمل HTML"، وليس ك "تحليل هذه subtemplate وتشمل محتوياته كما لو كانت جزءا من الأصل". وهذا يعني أنه لا يوجد دولة مشتركة بين القوالب وشملت - وتشمل كل عملية تقديم مستقلة تماما

وهكذا جانغو لا انتزاع أي كتل من commondata.html وأنها لا تعرف ماذا تفعل مع كتل خارج أتش تي أم أل المقدمة.

وهذا ينبغي أن تفعل خدعة لك: وضع تتضمن العلامة داخل قسم كتلة.

وpage1.html:

{% extends "base1.html" %}

{% block foo %}
   {% include "commondata.html" %}
{% endblock %}

وpage2.html:

{% extends "base2.html" %}

{% block bar %}
   {% include "commondata.html" %}
{% endblock %}

ومزيد من المعلومات حول لماذا لم يكن العمل بالنسبة لي في حال يساعد الناس في المستقبل:

والسبب أنها لا تعمل هو أن {تشمل٪٪} في جانغو لا يحب أحرف خاصة مثل الفاصلة الهوى. تم لصق البيانات قالب كنت أحاول أن تشمل من كلمة واحدة. كان لي لإزالة يدويا كل هذه الأحرف الخاصة وبعد ذلك شملت بنجاح.

وأنت لا يمكن سحب في كتل من ملف وشملت في قالب الطفل لتجاوز كتل القالب الأم. ومع ذلك، يمكنك تحديد أحد الوالدين في متغير ويكون القالب قاعدة محددة في هذا السياق.

:

<اقتباس فقرة>   

{٪ تمتد٪ متغير} يستخدم قيمة متغير. إذا بتقييم متغير إلى سلسلة، سوف جانغو استخدام هذه السلسلة كاسم القالب الأم. إذا بتقييم متغير إلى كائن قالب، سوف جانغو استخدام هذا الكائن كقالب الأم.

وبدلا من "page1.html" منفصل و "page2.html"، وطرح {% extends base_template %} في الجزء العلوي من "commondata.html". ثم من وجهة نظرك، وتحديد base_template أن تكون إما "base1.html" أو "base2.html".

واضاف لإشارة إلى الناس في المستقبل الذين يجدون هذا عن طريق البريد الإلكتروني: قد ترغب في النظر في {٪ تجهد٪} العلامة التي تقدمها المكتبة الميزانين لمثل هذه الحالات.

تحرير 10 ديسمبر 2015:كما أشار في التعليقات ، مباحث أمن الدولة هو إهمال منذ الإصدار 1.8.وفقا للوثائق:

هذه العلامة قد تم إهمال و سيتم إزالتها في جانغو 1.10.استخدام تشمل الوسم بدلا من ذلك.


في رأيي الحق (أفضل) الجواب على هذا السؤال هو واحد من podshumok, كما يفسر سلوك وتشمل عندما تستخدم جنبا إلى جنب مع الميراث.

ومع ذلك, وقد تفاجأت أن لا أحد ذكر مباحث أمن الدولة الوسم المقدمة من جانغو templating النظام الذي تم تصميمه خصيصا مضمنة بما في ذلك خارجي قطعة من النص.هنا ، مضمنة يعني الخارجي النص لا يمكن تفسيره, تحليل أو محرف, ولكن ببساطة "نسخ" داخل الدعوة القالب.

يرجى الرجوع إلى الوثائق للحصول على مزيد من التفاصيل (تأكد من التحقق من الإصدار المناسب من جانغو في محدد في أسفل الجزء الأيمن من الصفحة).

https://docs.djangoproject.com/en/dev/ref/templates/builtins/#ssi

من الوثائق:

ssi
Outputs the contents of a given file into the page.
Like a simple include tag, {% ssi %} includes the contents of another file
– which must be specified using an absolute path – in the current page

حذار أيضا من الآثار الأمنية المترتبة على هذه التقنية و أيضا المطلوبة ALLOWED_INCLUDE_ROOTS تعريف ، والتي يجب أن تضاف إلى ملفات الإعدادات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top