ImproperlyConfiguredError about app_name when using namespace in include()

前端 未结 5 1834
北荒
北荒 2020-12-02 14:59

I am currently trying out Django. I use the namespace argument in one of my include()s in urls.py. When I run the server and try to browse, I get t

相关标签:
5条回答
  • 2020-12-02 15:28

    I am also face the same error in Django 2.2 and i solve it this way

    urls.py file

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

    polls/urls.py file

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

    example use of namespace in calss based view method

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

    example use of namespace in templates

    {% url 'polls:index' %}
    

    Here polls:index mean app_name[define in polls/urls.py file]:name[define in polls/urls.py file inside path function]

    their official which is pretty good you can check for more info namespace_django_official_doc

    0 讨论(0)
  • 2020-12-02 15:32

    Django 2.0 you should specify app_name in your urls.py, is not necessary to specify app_name argument on include.

    Main Url file.

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

    Included Url.

    from django.urls import path
    from . import views
    
    app_name = 'main_app'
    
    urlpatterns = [
        path('', views.index, name='index'),
    ]
    

    Then use use in template as

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

    More details: https://code.djangoproject.com/ticket/28691 Django 2.0 Docs

    0 讨论(0)
  • 2020-12-02 15:34

    Check the docs for include here.

    What you've done is not an acceptable way of passing parameters to include. You could do:

    url(r'^reviews/', include(('reviews.urls', 'reviews'), namespace='reviews')),
    
    0 讨论(0)
  • 2020-12-02 15:38

    Django 1.11+, 2.0+

    You should set the app_name in the urls file you are including

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

    Then you can include it the way you are doing it.

    Also, it might be worth noting what Django docs say here https://docs.djangoproject.com/en/1.11/ref/urls/#include :

    Deprecated since version 1.9: Support for the app_name argument is deprecated and will be removed in Django 2.0. Specify the app_name as explained in URL namespaces and included URLconfs instead.

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

    0 讨论(0)
  • 2020-12-02 15:46

    I included a library not (fully) django 2.1 compatible yet (django_auth_pro_saml2). Hence I create a second file saml_urls.py:

    from django_saml2_pro_auth.urls import urlpatterns
    
    app_name = 'saml'
    

    Such that I could include the urls as:

    from django.urls import include, re_path as url
    
    urlpatterns = [
        ..., url(r'', include('your_app.saml_urls', namespace='saml')), ...
    ]
    

    Hacky, but it worked for me, whereas the url(r'^reviews/', include(('reviews.urls', 'reviews'), namespace='reviews')) did not.

    0 讨论(0)
提交回复
热议问题