三个应用程序名称空间

时间:2017-06-13 14:06:15

标签: python django django-urls

我要做的是为两个或更多应用程序提供通用命名空间。

假设我有一个包含3个应用程序的应用程序文件夹:仪表板(显示其他应用程序的管理面板),客户端(显示花式表)和订单(与客户端相同)。 看起来像这样:

--  apps
    |-- dashboard
    |   |-- views.py
    |   |-- models.py
    |   |-- urls.py
    |-- clients
    |   |-- views.py
    |   |-- models.py
    |   |-- urls.py
    |-- orders
    |   |-- views.py
    |   |-- models.py
    |   |-- urls.py

在我的主要urls.py中,我有:

url(r'^dashboard/', include('apps.dashboard.urls',
                                namespace='dashboard',
                                app_name='dashboard')),

在dashboard / urls.py中:

url(r'^clients/', include('apps.clients.urls')),
url(r'^orders/', include('apps.orders.urls')),

在客户中:

url(r'^$', views.AllClientsList.as_view(), name='clients-all'),

因此,我希望在客户端和订单应用中为网址设置相同的命名空间,以将其用作{% url "dashboard:clients-all" %}。但它根本不起作用 - NoReverseMatch: Reverse for 'customers_detailed' not found. 'customers_detailed' is not a valid view function or pattern name.

有什么办法吗?

更新: 像<a href='{% url 'dashboard:customers-all' %}'>Customers</a>这样的链接会引发错误&#34;反向为客户 - 所有&#39;未找到。 &#39;的客户,所有&#39;不是有效的视图函数或模式名称。&#34; urls.py

 urlpatterns = [ url(r'^dashboard/', include('apps.dashboard.urls')), ] 

应用/仪表板/ urls.py

 app_name = 'dashboard'
 urlpatterns = [ url(r'^customers/', include('apps.customers.urls')), ] 

应用/客户/ urls.py

 app_name = 'customers'
 urlpatterns = [ url(r'^$', views.AllCustomerList.as_view(), name='customers-all'), ] 

1 个答案:

答案 0 :(得分:1)

由于您的dashboard网址包含customers网址,因此您需要包含嵌套的命名空间:

{% url 'dashboard:customers:customers-all' %}