首先新建一個(gè)項(xiàng)目test_url,項(xiàng)目包含一個(gè)名為app01的應(yīng)用
在urls.py文件中生成如下內(nèi)容
from django.conf.urls import url
from django.shortcuts import HttpResponse
def index(request):
return HttpResponse("index")
def test(request):
return HttpResponse("test")
urlpatterns = [
url(r'^index',index),
url(r'^test',test),
]
啟動(dòng)項(xiàng)目,用瀏覽器打開http://127.0.0.1:8000/test和http://127.0.0.1:8000/index/
頁面如下
上面的例子是正向生成url,既然Django可以正向生成url,當(dāng)然也可以反向生成url
無參數(shù)反向生成url
修改urls.py文件
from django.conf.urls import url
from django.shortcuts import HttpResponse,redirect
def index(request):
from django.urls import reverse # 導(dǎo)入reverse
reverse_url=reverse("test_url") # 用reverse把別名為test_url的路由反向生成url
print("reverse_url:",reverse_url) # 打印反向生成的url
return redirect(reverse_url) # 重定向到反向生成的url
def test(request):
return HttpResponse("test")
urlpatterns = [
url(r'^index',index),
url(r'^test1/test2/test3/test',test,name="test_url"), # 為test路由設(shè)置一個(gè)test_url別名
]
用瀏覽器打開http://127.0.0.1:8000/index,然后回車
而服務(wù)端打印的反向生成的utl如下
可以看到,瀏覽器的地址欄里顯示的url跟我們輸入的地址不一樣,而是跟Django的路由表中設(shè)置了路由別名的url是一樣的.
從上面的例子可以看出,反向生成url已經(jīng)成功了.
有參數(shù)的反向生成url
使用正則表達(dá)式通過args傳入?yún)?shù)反向生成url
修改urls.py文件
from django.conf.urls import url
from django.shortcuts import HttpResponse,redirect
def index(request):
from django.urls import reverse
reverse_url=reverse("test_url",args=(2,8))
print("reverse_url:",reverse_url)
return redirect(reverse_url)
def test(request,*args,**kwargs):
return HttpResponse("test")
urlpatterns = [
url(r'^index',index),
url(r'^test1/(\d+)/test2/test3/(\d+)/test',test,name="test_url"),
]
瀏覽器打開http://127.0.0.1:8000/index這個(gè)地址
瀏覽器的地址變成了
而在服務(wù)端后臺(tái)打印反向生成的url為
使用正則表達(dá)式通過kwargs傳入?yún)?shù)反向生成url
修改urls.py文件
from django.conf.urls import url
from django.shortcuts import HttpResponse,redirect
def index(request):
from django.urls import reverse
reverse_url=reverse("test_url",kwargs={"a1":23,"a2":37})
print("reverse_url:",reverse_url)
return redirect(reverse_url)
def test(request,*args,**kwargs):
return HttpResponse("test")
urlpatterns = [
url(r'^index',index),
url(r'^test1/(?P<a1>\d+)/test2/test3/(?P<a2>\d+)/test',test,name="test_url"),
]
瀏覽器打開http://127.0.0.1:8000/index這個(gè)個(gè)地址
后臺(tái)打印反向生成的url
在前端中也可以使用反向url
{% url "test" 2013 12%}
{% url "test" year=2013 month=12%}