(नाम में) नाम स्थान का उपयोग करते समय app_name के बारे में अनुचित तरीके से कॉन्फ़िगर करें


105

मैं वर्तमान में Django बाहर की कोशिश कर रहा हूँ। मैं urls.py में namespaceअपने किसी एक में तर्क का उपयोग करता include()हूं। जब मैं सर्वर चलाता हूं और ब्राउज़ करने का प्रयास करता हूं, तो मुझे यह त्रुटि मिलती है।

File "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\urls\conf.py", line 39, in include
    'Specifying a namespace in include() without providing an app_name '
django.core.exceptions.ImproperlyConfigured: Specifying a namespace in include() without providing an app_name is not supported. Set the app_name attribute in the included module, or pass a 2-tuple containing the list of patterns and app_name instead.

ये मेरी urls.py फाइलें हैं:

#project/urls.py

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^reviews/', include('reviews.urls', namespace='reviews')),
    url(r'^admin/', include(admin.site.urls)),
]

तथा

#app/urls.py

from django.conf.urls import url

from . import views

urlpatterns = [
    # ex: /
    url(r'^$', views.review_list, name='review_list'),
    # ex: /review/5/
    url(r'^review/(?P<review_id>[0-9]+)/$', views.review_detail, name='review_detail'),
    # ex: /wine/
    url(r'^wine$', views.wine_list, name='wine_list'),
    # ex: /wine/5/
    url(r'^wine/(?P<wine_id>[0-9]+)/$', views.wine_detail, name='wine_detail'),
]

app_nameत्रुटि संदेश में बताए अनुसार मैं क्या करूं ?

जवाबों:


152

यहां शामिल करने के लिए डॉक्स की जांच करें

आपने जो किया है वह शामिल करने के लिए मापदंडों को पारित करने का स्वीकार्य तरीका नहीं है। तुम यह कर सकते थे:

url(r'^reviews/', include(('reviews.urls', 'reviews'), namespace='reviews')),

बस इसे आज़माया और एक और त्रुटि मिली ... url (r '^ समीक्षाएँ /', शामिल हैं ('reviews.urls', namespace = 'समीक्षाएँ', app_name = 'समीक्षाएँ')), TypeError: शामिल () एक अप्रत्याशित मिला कीवर्ड तर्क 'app_name'
नेल्सन M

1
बहुत खेद है। यह मॉड्यूल नहीं पैटर्न के साथ इस्तेमाल किया जाना चाहिए था। कृपया अद्यतन उत्तर की जाँच करें।
यूनिक्स

1
यह समाधान मेरे लिए भी मददगार था। मैं ट्यूटोरियल से पीछा कर रहा था django-oauth-toolkit.readthedocs.io/en/latest/tutorial/… और ऐसा करने के लिए एक निर्देश है: urlpatterns = [# OAuth 2 समापन बिंदु: url (r '^ o /'), शामिल हैं ( oauth2_endpoint_views, namespace = "oauth2_provider")), url (r '^ api / hello', ApiEndpoint.as_view ()), # एक उदाहरण समापन बिंदु]। यह वही त्रुटि उत्पन्न करता है जैसा आपने बताया था।
कोजी डिंफिन्टे

1
टुपल-सिंटैक्स ने मेरे लिए काम नहीं किया, यह केवल तब काम किया जब मैंने reviews.urlएक app_nameचर में होने के लिए (मेरा संस्करण) बदल दिया django 2.1
हर्बर्ट

इसके लिए उपयोग का मामला क्या है? मैंने अपनी परियोजना में और सभी को एक ही पैटर्न के साथ शामिल किया है, path("the_app/", include(("app.urls", <name>), namespace=<the same name>))और यह काफी कष्टप्रद है।
user4052054

80

Django 1.11+, 2.0+

आपको url फ़ाइल में app_name सेट करना चाहिए जिसमें आप शामिल हैं

# reviews/urls.py  <-- i.e. in your app's urls.py

app_name = 'reviews'
     

फिर आप इसे वैसे ही शामिल कर सकते हैं जैसे आप कर रहे हैं।

इसके अलावा, यह ध्यान देने योग्य हो सकता है कि Django डॉक्स यहां क्या कहते हैं https://docs.djangoproject.com/en/1.11/ref/urls/#include :

संस्करण 1.9 के बाद से पदावनत: app_name तर्क के लिए समर्थन को हटा दिया गया है और इसे Django 2.0 में हटा दिया जाएगा। URL नामस्थान में बताए अनुसार app_name निर्दिष्ट करें और इसके बजाय URLconfs शामिल करें।

( https://docs.djangoproject.com/en/1.11/topics/http/urls/#namespaces-and-include )


32

Django 2.0 आपको अपने urls.py में app_name निर्दिष्ट करना चाहिए , इसमें शामिल app_name तर्क को निर्दिष्ट करना आवश्यक नहीं है।

मुख्य यूआरएल फ़ाइल।

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('', include('apps.main.urls')),
    path('admin/', admin.site.urls),
]

उरल शामिल हैं।

from django.urls import path
from . import views

app_name = 'main_app'

urlpatterns = [
    path('', views.index, name='index'),
]

फिर टेम्पलेट के रूप में उपयोग का उपयोग करें

<a href="{% url main_app:index' %}"> link </a>

अधिक जानकारी: https://code.djangoproject.com/ticket/28691 Django 2.0 डॉक्स


2
मुझे आश्चर्य है, app_name = "मुख्य" का उपयोग क्या है? और django इस चर का उपयोग कैसे करता है
कनिष्क तंवर

4

मैंने एक पुस्तकालय शामिल नहीं किया (पूरी तरह से) django 2.1 संगत अभी तक (django_auth_pro_saml2)। इसलिए मैं दूसरी फाइल बनाता हूं saml_urls.py:

from django_saml2_pro_auth.urls import urlpatterns

app_name = 'saml'

इस तरह कि मैं उरल्स को शामिल कर सकता हूं:

from django.urls import include, re_path as url

urlpatterns = [
    ..., url(r'', include('your_app.saml_urls', namespace='saml')), ...
]

हैकी, लेकिन यह मेरे लिए काम किया, जबकि url(r'^reviews/', include(('reviews.urls', 'reviews'), namespace='reviews'))नहीं किया।


0

मैं Django 2.2 में भी उसी त्रुटि का सामना कर रहा हूं और मैं इसे इस तरह से हल करता हूं

urls.py फ़ाइल

urlpatterns = [
   path('publisher-polls/', include('polls.urls', namespace='publisher-polls')),
]

चुनाव / urls.py फ़ाइल

app_name = 'polls'
urlpatterns = [
  path('', views.IndexView.as_view(), name='index')
]

उदाहरण के आधार पर calss दृश्य विधि में नाम स्थान का उपयोग करें

def get_absolute_url(self):
    from django.urls import reverse
    return reverse('polls.index', args=[str(self.id)])

उदाहरण के नाम का उपयोग टेम्पलेट्स में

{% url 'polls:index' %}

यहाँ चुनाव: सूचकांक माध्य app_name [ चुनाव / urls.py फ़ाइल में परिभाषित]: नाम [ चुनाव में परिभाषित / पथ समारोह के अंदर urls.py फ़ाइल ]

उनका अधिकारी जो बहुत अच्छा है आप अधिक जानकारी के नाम checkpace_django_official_doc के लिए देख सकते हैं


-6

मेरे मामले में, मैं urlpatterns सूची के बाहर के यूआरएल लिख रहा था। कृपया दोबारा जाँचे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.