路由系統
1.單一路由對應
seo 搜索引擎的錄入權重
<ul>
{% for item in user_list %}
<li>{{ item }}|<a href="/edit/?nid={{ item }}">編輯</a></li>
{% endfor %}
</ul>
urlpatterns = [
url(r'^index$', views.index),
]
/?id=XXXX/ 這樣get傳值,seo優先級不高
- 2.基於正則的路由
<ul>
{% for item in user_list %}
<li>{{ item }}|<a href="/edit/{{ item }}">編輯</a></li>
{% endfor %}
</ul>
<ul>
{% for item in user_list %}
<li>{{ item }}|<a href="/edit/{{ item }}.html">編輯</a></li>
{% endfor %}
</ul>
urlpatterns = [
url(r'^edit/(\w+)/', views.edit),
url(r'^edit/(\w+).html$', views.edit),
# 僞靜態 seo 權重更高
# $ 終止符 如果遇到瀏覽器自動在末尾加/,清除緩存後解決。
]
def edit(request,a1):
return HttpResponse(a1)
- 3.帶參數的路由
<ul>
{% for item in user_list %}
<li>{{ item }}|<a href="/edit/{{ item }}/33/">編輯</a></li>
{% endfor %}
</ul>
urlpatterns = [
url(r'^edit/(?P<a1>\w+)/(?P<a2>\w+)/', views.edit),
]
def edit(request,a1,a2):
return HttpResponse(json.dumps((a1,a2)))
- 4.路由分發
# urls.py
urlpatterns = [
url(r'^app01/', include('app01.urls')),
]
# app01.urls.py
urlpatterns = [
url(r'^index$', views.index),
]
- 5.設置默認頁面
def default(request):
return HttpResponse('not find!')
urlpatterns = [
url(r'^',default),# 放在最後
]
- 6.爲路由映射設置別名
def index(request):
user_list = [
'spring',
'summer',
'autumn',
'winter',
]
v = reverse('n1')
print(v)
return render(request,'index.html',{'user_list':user_list})
urlpatterns = [
url(r'^index/', views.index,name='n1'),
]
<body>
<form method='POST' action="{%url 'n1'%}"
...
</body>
def edit(request,a1):
v = reverse('n2',args=(1,))
print(v)
return HttpResponse(json.dumps(a1))
urlpatterns = [
url(r'^edit/(\w+)', views.edit,name='n2'),
]
<body>
<form method='POST' action="{% url 'n1' i %}" #傳值
...
</body>
def edit(request,a1,a2):
v = reverse('n2',kwargs={'a1':222,'a2':333})
print(v)
return HttpResponse(json.dumps((a1,a2)))
urlpatterns = [
url(r'^edit/(?P<a1>\w+)/(?P<a2>\w+)/',
views.edit,name='n2'),
]