在标准的urls.py一个Django应用程序的,如果我通过一个app_name没有namespace到include()呼叫,象下面这样:
urlpatterns = [
# ...
url(r'^', include('foo.urls', app_name='foo')),
# ...
]
Run Code Online (Sandbox Code Playgroud)
击中包含的网址之一时,出现如下错误。
ValueError: Must specify a namespace if specifying app_name.
因此有必要做:
urlpatterns = [
# ...
url(r'^', include('foo.urls', namespace='foo-urls', app_name='foo')),
# ...
]
Run Code Online (Sandbox Code Playgroud)
我看不到两者之间的硬性依赖。为什么必须指定一个namespace以便能够指定一个app_name?
小智 6
如果在include函数中使用namespace属性,则必须在使用的应用程序urls.py文件中定义app_name。> Django 2.0 URL调度程序文档
例如,如果这是您的项目结构:
project/
??? app1
? ??? urls.py
??? app2
? ??? urls.py
??? project
??? urls.py
Run Code Online (Sandbox Code Playgroud)
并且要包含(app1,app2)URL,首先必须在app1 / urls.py和app2 / urls.py中定义app_name:
file: app1/urls.py:
app_name='app1'
urlpatterns = [
path('', views.home, name='home'),
]
Run Code Online (Sandbox Code Playgroud)
file: app2/urls.py:
app_name='app2'
urlpatterns = [
path('', views.home, name='home'),
]
Run Code Online (Sandbox Code Playgroud)
file: project/urls.py:
urlpatterns = [
path('', include('app1.urls', namespace='app1')),
path('', include('app2.urls', namespace='app2')),
]
Run Code Online (Sandbox Code Playgroud)
所以,你现在可以使用这样的事情{% url 'app1:home' %}还是{% url 'app2:home' %}在你的模板文件。
| 归档时间: |
|
| 查看次数: |
4001 次 |
| 最近记录: |