2009-07-26 9 views
46

मेरे पास एक छोटी टाइपोग्राफी संबंधित templatetag लाइब्रेरी है जिसका उपयोग मैं लगभग हर पृष्ठ पर करता हूं। अभी मैंडिफ़ॉल्ट रूप से सभी विचारों के लिए एक Django टेम्पलेट टैग लाइब्रेरी लोड करें

{% load nbsp %} 

का उपयोग कर प्रत्येक टेम्पलेट के लिए इसे लोड करने की आवश्यकता है वहाँ यह "विश्व स्तर पर" एक बार में सभी विचारों और टेम्पलेट्स के लिए लोड करने के लिए कोई तरीका है? लोड टैग को आधार टेम्पलेट में रखना काम नहीं करता है।

उत्तर

68

विधि django.template.loader में विधि है। बस इसे अपने templatetags मॉड्यूल (एक स्ट्रिंग के रूप में) का नाम पास करें।

from django.template.loader import add_to_builtins 

add_to_builtins('myapp.templatetags.mytagslib') 

अब mytagslib किसी भी टेम्पलेट में स्वचालित रूप से उपलब्ध है।

+1

उत्कृष्ट, धन्यवाद। –

+23

ध्यान दें कि जब आप ऐसा कर सकते हैं, तो यह काफी संभावना है कि आपको किसी बिंदु पर खेद होगा (मैंने इसे किया है, और खेद है)। यह आपके टेम्पलेट्स को किसी अन्य प्रोजेक्ट के लिए गैर-पोर्टेबल बनाता है जो add_to_builtins नहीं करता है, और यह उन टेम्पलेट्स को प्रस्तुत करने वाले परीक्षणों को तोड़ सकता है (जब तक कि आप सुनिश्चित न करें कि परीक्षण धावक add_to_builtins भी चलाता है)। सब कुछ, यह सुविधा में बहुत कम लाभ के लिए चीजों को और अधिक भंगुर बनाता है। –

+18

उल्लेख नहीं है कि किसी भी नए डेवलपर को आपके टैग के उपयोग से भ्रमित किया जा रहा है जो मानक पुस्तकालयों में मौजूद नहीं है, जब तक कि वे आपको पूछें (यदि आप अभी भी आसपास हैं) या उस पर ठोकरें। :) याद रखें, निहित से स्पष्ट स्पष्ट है। –

26

Django 1.7 में सिर्फ from django.template.base import add_to_builtins

+3

में एक खाली __init__.py फ़ाइल भी जोड़नी पड़ सकती है क्यों डाउनवोट? यह मेरा दिन बचाया, क्योंकि स्वीकृत उत्तर पुराना है! Django 1.7 में आयात पथ बदल गया है। धन्यवाद bsao! –

+0

क्या यह [मौजूदा उत्तर] पर एक टिप्पणी या संपादन होना चाहिए (http://stackoverflow.com/a/1185049/1075247)? यह अपने आप पर समझ में नहीं आता है। – Pureferret

27

के लिए यह Django 1.9 रिलीज के साथ बदल जाएगा बदल दें।

1.9 के बाद से, सही दृष्टिकोण OPTIONS की builtins कुंजी के अंतर्गत टेम्पलेट टैग और फ़िल्टर कॉन्फ़िगर किया जाएगा - नीचे उदाहरण देखें:

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [], 
     'APP_DIRS': True, 
     'OPTIONS': { 
      'builtins': ['myapp.builtins'], 
     }, 
    }, 
] 

विवरण: Django 1.9 में https://docs.djangoproject.com/en/dev/releases/1.9/#django-template-base-add-to-builtins-is-removed

+0

अभी तक (Django 1.9), यह स्वीकार्य उत्तर होना चाहिए। –

+0

''बिल्टिन': ['django.templatetags.i18n'], 'ओह हाँ। –

4

वहाँ एक libraries शब्दकोश है टेम्पलेट इंजन के साथ पंजीकरण करने के लिए टेम्पलेट टैग मॉड्यूल के लेबल और बिंदीदार पाइथन पथ। इसका उपयोग नए पुस्तकालयों को जोड़ने या मौजूदा लोगों के लिए वैकल्पिक लेबल प्रदान करने के लिए किया जा सकता है।

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [], 
     'APP_DIRS': True, 
     'OPTIONS': { 
      'context_processors': [ 
       'django.template.context_processors.debug', 
       'django.template.context_processors.request', 
       'django.contrib.auth.context_processors.auth', 
       'django.contrib.messages.context_processors.messages', 
      ], 
      'libraries': { # Adding this section should work around the issue. 
       'custom_tags' : 'myapp.templatetags.custom_tags',#to add new tags module. 
       'i18n' : 'myapp.templatetags.custom_i18n', #to replace exsiting tags modile 
      }, 
     }, 
    }, 
] 
संबंधित मुद्दे