在include方法里面指定namespace卻不提供app_name是不允許的。
在包含的模塊里設(shè)置app_name變量眉踱,或者在include方法里面提供app_name參數(shù)语卤。
報錯截圖
runserver發(fā)生錯誤
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.
解決方法
方法1:在 主文件夾/urls.py中修改
from django.urls import path,include
from app import urls as app_url
urlpatterns = [
path('', include((common_url,'common'), namespace='common')),
]
主文件夾下urls.py配置
方法2:在 app文件夾/urls.py中修改
from django.urls import path
from .views import index
app_name='common'
urlpatterns = [
path('',index,name='index'),
]
在app文件夾下urls.py配置
正向解析與反向解析
urlinfo.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a href="/cmdb/urlinfo">cmdb/userinfo</a> <br>
<a href="/cmdb/urlinfo/tom">cmdb/userinfo/tom</a><br>
<a href="/cmdb/urlinfo/tom/10">cmdb/userinfo/tom/10</a><br>
<a href="/cmdb/urlinfo/tom/tomnickname/10">cmdb/userinfo/tom/tomnickname/10</a><br>
<a href="/cmdb/urlinfo/2019/02/12">/cmdb/urlinfo/2019/02/12</a><br>
<a href="{% url 'cmdb:userinfo1' %}">url 'cmdb:userinfo1'</a>
<a href="{% url 'cmdb:userinfo2' 'tom' 10 %}">url 'cmdb:userinfo2' tom 10 </a><br>
<a href="{% url 'cmdb:userinfo3' name='tom' age=19 nickname='tomnickname' %}">cmdb/userinfo/tom/tomnickname/10</a><br>
<br><br>
通過路由獲得用戶信息<br>
info:{{ info }} <br>
name:{{ name }}<br>
nickname:{{ nickname }}<br>
age:{{ age }}
year:{{ year }}
month:{{ month }}
day:{{ day }}
</body>
</html>
其中解析部分如下
<-- 正向解析 -->
<a href="/cmdb/urlinfo">cmdb/userinfo</a> <br>
<a href="/cmdb/urlinfo/tom">cmdb/userinfo/tom</a><br>
<a href="/cmdb/urlinfo/tom/10">cmdb/userinfo/tom/10</a><br>
<a href="/cmdb/urlinfo/tom/tomnickname/10">cmdb/userinfo/tom/tomnickname/10</a><br>
<a href="/cmdb/urlinfo/2019/02/12">/cmdb/urlinfo/2019/02/12</a><br>
<-- 反向解析 -->
<a href="{% url 'cmdb:userinfo1' %}">url 'cmdb:userinfo1'</a>
<a href="{% url 'cmdb:userinfo2' 'tom' 10 %}">url 'cmdb:userinfo2' tom 10 </a><br>
<a href="{% url 'cmdb:userinfo3' name='tom' age=19 nickname='tomnickname' %}">cmdb/userinfo/tom/tomnickname/10</a><br>
正向解析url.py
django2 中使用
path來進行配置普通路徑使用r
e_path來配置正則表達式路徑
(?P<name>partten)來定義有名路徑 其中name為名字 patten為正則表達式
#正向解析url
path("urlinfo", views.urlinfo1),
path("urlinfo/<str:name>", views.urlinfo2),
path("urlinfo/<str:name>/<int:age>", views.urlinfo3),
# path("urlinfo/<str:nickname>/<str:name>/<int:age>",views.urlinfo4), #位置匹配 re_path(r"^urlinfo/(?P<name>[A-Za-z]{0,})/(?P<nickname>[A-Za-z]{0,})/(?P<age>\d{0,})/$",views.urlinfo5),#名稱匹配
re_path(r'^urlinfo/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})', views.urlinfo6),
反向解析url.py
在主目錄下的urls中配置namespace追逮,子app目錄下urls中配置name
頁面中通過 <% url namesapce:name %>來反向匹配
#反向解析url
path("urlinfo", views.urlinfo1,name="userinfo1"),
path("urlinfo/<str:name>/<int:age>", views.urlinfo3,name="userinfo2"),
re_path(r"^urlinfo/(?P<name>[A-Za-z]{0,})/(?P<nickname>[A-Za-z]{0,})/(?P<age>\d{0,})/$",views.urlinfo5,name="userinfo3"),
子目錄 app目錄下urls.py配置
反向解析url結(jié)果
在重定向時使用反向解析
先導入模塊 from django.urls import reverse
傳參數(shù)是 位置參數(shù)名 args=(tuple) tuple
參數(shù)名參數(shù) kwargs ={key:value .....} dict
app目錄下views.py
def urlinfo7(request):
#無參數(shù)
url=reverse('cmdb:userinfo1')
#順序參數(shù)
url=reverse('cmdb:userinfo2',args=(1,2))
#含參參數(shù)
url=reverse('cmdb:userinfo3',kwargs={"name":"tom","age":19,"nickname":"tomnickname"})
return redirect(url)