Django 1.10.1 'my_templatetag' एक पंजीकृत टैग लाइब्रेरी नहीं है। इनमें से एक होना चाहिए:


82

मुझे लगता है कि आप किस समूह के सदस्य हैं, इसके आधार पर मुझे मेनू मेनू कस्टम चाहिए। Im Django 1.10.1, अलाउथ और इतने पर का उपयोग कर। जब im मेरे templatetag बनाने की कोशिश कर रहा है यह विफल रहता है और यह कहता है: my

TemplateSyntaxError at /
'my_templatetag' is not a registered tag library. Must be one of:
account
account_tags
admin_list
admin_modify
admin_static
admin_urls
cache
i18n
l10n
log
socialaccount
socialaccount_tags
static
staticfiles
tz

'my_templatetag.py' इस तरह दिखता है:

from django import template
from django.contrib.auth.models import Group


register = template.Library()

@register.filter(name='has_group')
def has_group(user, group_name):
    group =  Group.objects.get(name=group_name)
    return group in user.groups.all()

और tha error मेरे .html फ़ाइल में आती है जो कहती है,

{%  load my_templatetag %}

मैंने लाखों बार सर्वर को पुनः आरंभ करने की कोशिश की है, मैंने भी सभी नामों को बदलने की कोशिश की है, और ऐप सेटिंग्स में INSTALLED_APPS का एक हिस्सा है। मैं क्या गलत कर रहा हूं?

जवाबों:


133

my_templatetag.pyअंदर डालने के अलावा app_name/templatetags, सुनिश्चित करें कि आप हर बार जब आप टेम्पलेट टैग को संशोधित करते हैं तो Django विकास सर्वर को पुनरारंभ करें (या इसे स्वयं पुनरारंभ करना सुनिश्चित करें)। यदि सर्वर पुनरारंभ नहीं होता है, तो Django टैग पंजीकृत नहीं करेगा।


8
सर्वर को पुनरारंभ करना! बहुत - बहुत धन्यवाद!
FMCorz

2
मेरे लिए यह templatetags फ़ोल्डर में __init__.py गायब था ...
zypro

यही कारण है कि मुझे
स्टैकओवरफ्लो से

70

Django 1.9 से, आप उन नए टैग / फ़िल्टर को इस तरह सेटिंग में लोड कर सकते हैं:

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',
            'app.apptemplates.load_setting',

        ],

        'libraries':{
            'my_templatetag': 'app.templatetags.my_templatetag',

            }
    },
},

]


2
इसके लिए बहुत बहुत धन्यवाद :) इसे दूसरे तरीके से काम करने के लिए नहीं मिला।
जोनाथन

1
इसने मेरे लिए भी काम किया। यह वास्तव में प्रश्न के लिए चुना गया उत्तर हो सकता है। मैं django के 2.0 संस्करण का उपयोग कर रहा हूं जब लोग आश्चर्य करते हैं।
आरआरसी

इसने मुझे पूरे प्रोजेक्ट के लिए कस्टम टैग का उपयोग करने की अनुमति दी
बजे

यह तब भी काम करता है जब आपको किसी साइट-पैकेज के विशिष्ट टेम्प्लेटेटैग को ओवरराइट करने की आवश्यकता होती है
निको एम

इसका उत्तर होना चाहिए: मैं Django 3.x का उपयोग करता हूं।
फियरलेस

35

सुनिश्चित करें कि आप निम्न चरणों में से कोई भी याद नहीं कर रहे हैं:

  1. अपने एप्लिकेशन फ़ोल्डर में मॉडल के रूप में उसी स्तर पर "templatetags" नाम का एक फ़ोल्डर बनाएं, जो कि Oracle और view.py के समान है

  2. सेटिंग में आपका आवेदन INSTALLED_APPS में होना चाहिए

  3. Templatetags फ़ोल्डर में __init__.py होना चाहिए

  4. Django सर्वर को पुनरारंभ करें


मेरे लिए ऐसा लगता है कि मेरे सभी ऐप्स को शामिल करने के लिए एक एप्सडोम और init .py की आवश्यकता है default_app_config = 'custom_admin.apps.Config'। अन्यथा Django 1.10 templatetags लोड नहीं कर रहा है। मुझे यह स्पष्ट रूप से डॉक्स में नहीं दिखता है।
क्रिस सतिंगर

धन्यवाद! मैं जोड़ना भूल गया था __ini__.py, लेकिन क्या आप जानते हैं कि यह पायथन 3 में क्यों काम करता था लेकिन पायथन 2 में नहीं?
फ़रज़ाद अब्दोल्होसिनि

2
यह पुनरारंभ है जो मुझे हर बार मिलता है! # 4 ^ ^ पर मेरी याद दिलाने के लिए Thx
मार्क

बिंदु # 4 ने मुझे "Django सर्वर को पुनरारंभ करें" में मदद की, इसलिए Django नए टेम्पलेट टैग की पहचान कर सकता है।
फरेस

21

मेरे मामले में समस्या यह थी, मैं उपयोग कर रहा था {% load filter_method_name %}

मुझे बदलना पड़ा {% load filename %}

मुझे फिर सर्वर को पुनरारंभ करना पड़ा ।


2
सर्वर को पुनरारंभ करें , एक कष्टप्रद बग के लिए इस तरह के एक सरल समाधान
अहमद आई। एल्सेयेड

फ़ाइलनाम मेरे लिए एक था। धन्यवाद!
रैवियोली

@ravioli हाँ, नोटिस करने के लिए एक बहुत ही सूक्ष्म बात है
साजिब

धन्यवाद! मैंने इसे पूरी तरह से नजरअंदाज कर दिया, क्योंकि मैंने मान लिया था कि मुझे विधि को लोड करने की आवश्यकता है न कि स्वयं मॉड्यूल की।
राजसी पिक्सेल

4

'My_templatetag.py' कहाँ संग्रहीत है? इसे 'templatetags' नामक एक निर्देशिका में संग्रहीत किया जाना चाहिए जो ऐप के भीतर है।

कृपया देखें: अगर ऐसा नहीं है तो https://docs.djangoproject.com/en/dev/howto/custom-template-tags/


1
धन्यवाद, यह मानचित्र नाम था!
स्लिलेजल

3

Django सर्वर को पुनरारंभ करें। यह ऐप के भीतर टेम्प्लेटेटैग फ़ोल्डर और टेम्प्लेटेटैग फोल्डर में template_name.py के सेट होने के बाद मेरे लिए काम करता है।


3

यदि यह किसी की मदद करता है, तो मेरे मामले में मुद्दा यह था कि मैं टैग लोड करने की कोशिश करते समय उद्धरणों का उपयोग कर रहा था

{%  load 'my_templatetag' %}  <!-- incorrect -->

के बजाय

{%  load my_templatetag %}  <!-- correct -->

नोट: extendsफ़ाइल नाम के आसपास उद्धरणों की आवश्यकता है लेकिन नहींload


यह मेरी समस्या थी!
elplatt

3

आपको मैन्युअल रूप से विकास सर्वर को बंद करना होगा और इसे फिर से शुरू करना होगा, इसलिए Django नए टेम्पलेट टैग की पहचान कर सकता है


इस प्रश्न के पहले से ही इस पर कई उत्तर हैं, और इस पोस्ट में कुछ भी नहीं है जो अन्य उत्तरों में नहीं कहा गया है।
हेनरी वुडी

2

मैं Django 1.11 का उपयोग कर रहा हूं, और मुझे भी यही समस्या हो रही थी। यहां कुछ उत्तर सही हैं, लेकिन कुछ चीजें गायब हो सकती हैं। मैंने जो किया था यह रहा:

पिछले उपयोगकर्ता का हवाला देते हुए:

अपने एप्लिकेशन फ़ोल्डर में मॉडल के रूप में उसी स्तर पर "templatetags" नाम का एक फ़ोल्डर बनाएं, जो कि Oracle और view.py के समान है

सेटिंग में आपका आवेदन INSTALLED_APPS में होना चाहिए

Templatetags फ़ोल्डर है चाहिए init .py

लेकिन, इससे पहले कि आप Django सर्वर को फिर से शुरू करें, इसे उस फ़ाइल में जोड़ें जिसमें टैग हैं:

from django import template
register = template.Library()

फिर आप सर्वर को फिर से शुरू कर सकते हैं।


यह मेरे लिए तब काम आया जब मैंने 'init.py' के बजाय ' init .py' का उपयोग किया ।
विलियम

1

मुझे पता है कि यह थोड़ा पुराना है, लेकिन मैं आज उसी समस्या में भाग गया। मुझे डॉक्स में समाधान मिला: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

एप्लिकेशन में एक templatetags निर्देशिका सम्‍मिलित होनी चाहिए, समान स्तर पर जैसे कि मॉडलशो, व्यूहोम, आदि। यदि यह पहले से मौजूद नहीं है, तो इसे बनाएं - यह सुनिश्चित करने के लिए __init__.py फ़ाइल को न भूलें कि निर्देशिका के रूप में माना जाता है एक पायथन पैकेज।

नए टेम्पलपेटैग की निर्देशिका में __init__.py को किसी अन्य स्थान से कॉपी करके इसे सॉर्ट किया गया।


1

मैं एक जोड़कर इस हल templatestag एक साथ जड़ में फ़ोल्डर filter.py मेरी फिल्टर को परिभाषित फ़ाइल है, तो मैं अपने समायोजित settings.py

कृपया इस समान धागे में इस मुद्दे के बारे में मेरा पूरा उत्तर देखें


0

my_templatetag.py को app_name / templatetags के अंदर रखें और फिर init बनाएं अंदर app_name / templatetags .py .. प्रोजेक्ट फ़ोल्डर दे आदेश अजगर manage.py खोल में फिर खुला टर्मिनल

app_name.templatetags से my_templatetag आयात करते हैं


अंदर templatetags फ़ोल्डर टोकरा रिक्त फ़ाइल init .py
किरण बाछव के साथ।

2
कृपया सभी विवरणों को इसमें डालने के लिए अपना उत्तर संपादित करें और इसे पढ़ने योग्य बनाने के लिए प्रारूपित करें (कोड स्वरूपण जहाँ उपयुक्त हो) का उपयोग करें।
मेलेबियस

0

आप होम कोड से (जो templatetags / home.py) के अंदर लिखे अपने कोड को काटते / हटाते हैं, आप अपना कोड हटाते हैं और अपने सर्वर को पुनः आरंभ करते हैं और फिर से अपने कोड को home.py में पेस्ट करते हैं, यह काम करेगा।


0

यह समस्या, आप वर्तमान में पुराने django संस्करण या जटिल रूप से "मूल्यह्रास" लिखने के कारण झेल रहे हैं।

यदि आप अपने टेम्प्लेट / एचटीएमएल फाइलों में इन प्रकार के टीएवी का उपयोग करते हैं, तो उन्हें बदल दें ..

> {{% load staticfiles %} or  {% load admin_static %}, {% load
> admin_static %}}

के साथ बदलना


{% load static %}

इस बिंदु पर जाएं .. JUst SImply YOur BAse.html / या HTML के किसी भी प्रकार से इन सभी को बदलें


क्या आप इस गन्दे विवरण को सही कर सकते हैं? आपके स्पष्टीकरण को समझना मेरे लिए कठिन है। कृपया कोड स्वरूपण को भी सही करें। देखें कैसे जवाब दें
Gander

-1

सबसे पहले server.remove को बंद करें / templatetags / tag.py से कोड को काटें और इसे फिर से लिखें / पेस्ट करें। फिर सर्वर चलाएं। मेरे लिए काम किया


2
कटिंग कैसे होगी, फिर कोड में वापस चिपकाने से मदद मिलेगी? यदि आपको प्रश्न के नमूना कोड में कोई त्रुटि दिखाई देती है, तो कृपया उसे इंगित करें।
बेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.