كيفية الجمع بين قالب من المصنعة الأخرى القوالب ؟

StackOverflow https://stackoverflow.com/questions/283300

  •  08-07-2019
  •  | 
  •  

سؤال

لدي مشروع جانغو pro1 مع عدة تطبيقات:التطبيق1, app2, app3 وهلم جرا.أريد أن عرض بعض أعلى مستوى القالب الذي يحتوي على كتل من كل التطبيق:

example_base_template.html:

[header /]
[left nav bar]{{ app1 rendered template }}[/left nav bar]
[right nav bar]{{ app2 rendered template }}[/right nav bar]
[center section]{{ app1 main functionality template }}[/center section]
[footer]{{ app3 rendered template }}{{ app4 rendered template }}[/footer]

كل تلك قوالب التطبيق الحيوية ، التي تستخدم ديسيبل.كيف تفعل ذلك في الأكثر مناسبة وأنيقة الطريقة ؟ أو ربما السؤال هو كيفية توصيل 4 وجهات نظر مختلفة إلى عنوان URL واحد?

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

المحلول

لدينا مشكلة مماثلة إلى هذا المفتاح هو الحصول على البيانات الصحيحة في السياق.ما فعلناه كان اختراق البيانات إنشاء/سياق ملء كل رأي مستقل بناء على السياق الروتينية.الأصلي وجهات النظر فقط اتصل كل منهما الروتينية ثم تجعل القالب.مركب عرض المكالمات كل من السياق-بناة ثم يجعل القالب الرئيسي ، ثم الذي يتضمن الفرعية قوالب.

هذا هو المكان الذي واجهت مشكلة مع جانغو templating النظام.كنا التخزين المؤقت قالب شظايا بعض هذه الشظايا أخذت البيانات التي كانت مكلفة للغاية لتوليد.إذا كان جزء لا معنى لها, نحن بالتأكيد لا تريد للقيام بهذا العمل.ولكن تأخير العمل حتى نعرف نحن في حاجة يعني أننا الآن في القالب:

  • لا يمكنك تمرير المعلمات إلى أساليب من داخل القالب.
  • في جانغو.القالب.__init__.متغير._resolve_lookup() طريقة كسر في أنه إذا مرت للاستدعاء لن أسميها!إذا كنت المرجعية طريقة كائن في السياق ، أن يعمل على ما يرام.

سبب الحاجة إلى callables العمل هو أنه يسمح لك بالمرور في بالكاري وظيفة-أيالدالة التي لديها بالفعل بعض (أو كل) من المعايير المحددة ، ولكن الذي لم يطلق. لذلك يرى (أو سياق بناء في القضية) ينبغي أن تكون قادرة على الكاري كامل-تحديد وظيفة (تذكر أنك لا يمكن أن تمر params في قوالب أنفسهم) بحيث القالب عندما تحتاج إلى يمكن استدعاء للاستدعاء, الحصول على البيانات, ونذهب بعيدا.

أخذنا منفصلين نهج هذا:

منذ فعلنا هذا الموقع تعلمت أننا قد تكون قادرة على حلها باستخدام مولدات كما تأخر منتجي البيانات.مولدات تعمل كنوع من بالكاري وظيفة (في أنه يمكنك تمرير التعسفي params الإعداد) ، ولكن قالب المحرك تعتبرهم مجرد التكرار.هناك تعليمي كبير على هذا الموضوع.ملاحظة:مولدات ليست المصفوفات و يمكنك فقط تستهلك منها مرة واحدة ، وحتى بعض من المنطق الخاص بك قد تحتاج إلى بعض التعديلات.

في المرة القادمة أعتقد أننا سوف أذهب مع jinja2 قوالب و توقف عن العبث مع جانغو قوالب.

نصائح أخرى

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

لا يمكنك (بطريقة بسيطة) مزيج من عدة وجهات نظر في واحد.محاولة فئة جميلة جانغو الحل.

وفعلت ذلك عن طريق كتابة علامات قالب مخصص لكل تطبيق أردت أن تشمل. في البداية علامات قالب بلدي مر لتوه أتش تي أم أل الثابت ترميز. في وقت لاحق وجدت أن العلامات يمكن تحميل شظايا قالب الخاصة بهم. وكان هناك أيضا المتكررة في مكان ما كان ذلك عام آخر سمة المحتوى التي عملت بشكل جيد جدا.

والعديد من التطبيقات التي يمكن إعادة استخدامها (خاصة تلك المحددة في المشروع Pinax ) تخدم أمثلة رائعة كما حول كيفية استخدام مخصصة علامات قالب لإدراج المحتوى. الحديث في DjangoCon 2008 قد يساعد أيضا.

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