在Django应用的标准urls.py
中,如果我将app_name
没有namespace
传递到include()
来电,如下所示:
urlpatterns = [
# ...
url(r'^', include('foo.urls', app_name='foo')),
# ...
]
当点击其中一个包含的网址时,我收到如下错误。
ValueError: Must specify a namespace if specifying app_name.
所以有必要这样做:
urlpatterns = [
# ...
url(r'^', include('foo.urls', namespace='foo-urls', app_name='foo')),
# ...
]
我没有看到两者之间的紧密依赖;为什么需要指定namespace
才能指定app_name
?
答案 0 :(得分:5)
如果您在包含功能中使用命名空间属性,则必须在应用 urls.py <中定义 app_name / strong>您正在使用的文件。 &GT; Django 2.0 URL dispatcher documentation
例如,如果这是您的项目结构:
project/
├── app1
│ └── urls.py
├── app2
│ └── urls.py
└── project
└── urls.py
如果你想包含(app1,app2)网址,首先必须在app1 / urls.py和app2 / urls.py中定义 app_name :
file: app1/urls.py
:
app_name='app1'
urlpatterns = [
path('', views.home, name='home'),
]
file: app2/urls.py
:
app_name='app2'
urlpatterns = [
path('', views.home, name='home'),
]
file: project/urls.py
:
urlpatterns = [
path('', include('app1.urls', namespace='app1')),
path('', include('app2.urls', namespace='app2')),
]
因此,您现在可以在模板文件中使用此类{% url 'app1:home' %}
或{% url 'app2:home' %}
。
答案 1 :(得分:0)
你需要把:app_name放在&#34; foo.urls&#34;
link:https://docs.djangoproject.com/en/2.0/topics/http/urls/#url-namespaces-and-included-urlconfs