2009-05-21 13 views
25

दूसरा समय अधिक जानकारी के पूछ में अपने सभी क्षुधा के बीच साझा किया ... है कैसेDjango - एक परियोजना विस्तृत templatetags कि इस परियोजना

मैं आम टैग नहीं है के लिए एक परियोजना विस्तृत templagetags निर्देशिका करना चाहते हैं सभी ऐप्स द्वारा उपयोग किया जाता है, तो यदि आवश्यक हो तो प्रत्येक ऐप के अपने टैग हो सकते हैं।

माना कि मेरे पास है:

proj1/app1 
proj1/app1/templatetags/app1_tags.py 

proj1/app2 
proj1/app2/templatetags/app2_tags.py 

proj1/templatetags/proj1_tags.py 

proj1/templates/app1/base.html 
proj1/templates/app1/index.html 
proj1/templates/app2/base.html 
proj1/templates/app2/index.html 

कहाँ:

proj1/templates/app1/base.html 
----------- 
{% load proj1_tags %} 
{% load app1_tags %} 

proj1/templates/app1/index.html 
----------- 
{% extends "base.html" %} 

proj1/templates/app2/base.html 
----------- 
{% load proj2_tags %} 
{% load app2_tags %} 

proj1/templates/app2/index.html 
----------- 
{% extends "base.html" %} 

चाहेंगे इस काम करता है? यह मेरे लिए काम नहीं किया। यह लोड करने के लिए proj1_tags नहीं मिल सकता है।

उत्तर

36

अगर यह सही तरह से यह करने के लिए है मैं नहीं जानता, लेकिन मेरे Django क्षुधा में, मैं हमेशा एक lib "एप्लिकेशन" में आम टेम्पलेट टैग जगह है, तो जैसे:

proj/ 
    __init__.py 
    lib/ 
     __init__.py 
     templatetags/ 
      __init__.py 
      common_tags.py 

में INSTALLED_APPS की अपनी सूची में lib ऐप जोड़ने के लिए बस सुनिश्चित करें।

+2

मैं आमतौर पर परियोजना के बाद एप्लिकेशन का नाम दें। –

+3

'आम' या 'कॉमन्स' भी एक अच्छा नाम हो सकता है। –

+0

आप इसे HTML फ़ाइलों में कैसे कॉल करते हैं? बस '{% लोड common_tags%}'? – andi

3

Django INSTALLED_APPS में प्रत्येक अनुप्रयोग के लिए विश्व स्तर पर templatetags पंजीकृत करता है (और यही कारण है अपने समाधान काम नहीं करता है: परियोजना एक आवेदन के रूप में Django द्वारा समझा नहीं है) — वे सभी टेम्पलेट में उपलब्ध हैं (उपलब्ध कराने के वे ठीक से दर्ज किया गया था)।

मेरे पास आमतौर पर एक ऐप है जो विविध कार्यक्षमता (साइट के प्रारंभ पृष्ठ की तरह) को संभालता है और टेम्पलेटैटैग को किसी भी विशेष ऐप से संबंधित नहीं रखता है, लेकिन यह पूरी तरह से कॉस्मेटिक है।

0

Django ऐप द्वारा काम करता है। वे INSTALLED_APPS सेटिंग में संदर्भित हैं।

मैं आपको एक अलग ऐप से संबंधित सब कुछ विभाजित करने का सुझाव देता हूं। अपने templatetags समस्या के लिए, आप 'common_tags' नामक ऐप बना सकते हैं। तब सेटअप INSTALLED_APPS सेटिंग्स इसका इस्तेमाल करने की है, और आप तो जैसे किसी भी टेम्पलेट्स से अपने सामान्य टैग लोड करने के लिए सक्षम हो जाएगा:

{% load XXXX %} 
9

Django 1.9 के बाद से, यह अब जरूरी नहीं है अतिरिक्त common ऐप बनाने के रूप में दूसरों का उल्लेख किया । आपको बस अपनी परियोजना templatetags निर्देशिका में settings.py के OPTION['libraries'] dict के लिए पथ जोड़ने की आवश्यकता है।

उसके बाद, ये टैग आपकी पूरी परियोजना में पहुंच योग्य होंगे। templatetags फ़ोल्डर जहां भी आपको चाहिए वहां रखा जा सकता है और अलग-अलग नाम भी हो सकते हैं। Django docs से

स्वनिर्धारित उदाहरण: "project_core" - लेकिन एक ही समाधान:

OPTIONS={ 
    'libraries': { 
     'myapp_tags': 'path.to.myapp.tags', 
     'project_tags': 'project.templatetags.common_extras', 
     'admin.urls': 'django.contrib.admin.templatetags.admin_urls', 
    }, 
} 
+1

बस इसे स्पष्ट करने के लिए, टेम्पलेट एचटीएमएल में जहां इस टैग को सामान्य रूप से '{% common_extras%}' का उपयोग करके टैग को कॉल करने से पहले '{% load project_tags%}' की आवश्यकता होती है। – h4k1m

संबंधित मुद्दे