1. 程式人生 > 實用技巧 >python測試開發django(4)--獲取url引數和name的作用

python測試開發django(4)--獲取url引數和name的作用

前言

如開啟部落格園按時間分類標籤頁

https://www.cnblogs.com/canglongdao/archive/2020/07.html,裡面是時間引數是動態的,如果我想獲取裡面的時間引數2020和07這兩個引數,這就涉及到url引數的獲取了。

獲取url引數

先用path去匹配一個url地址,類似於:archive/2020/07.html,於是取兩個引數名稱year,month

引數用<name>這種格式

#helloworld/helloworld/urls.py
from django.conf.urls import url
from django.urls import re_path,path
from xjyn import views

urlpatterns=[
   path("archive/<year>/<month>.html",views.hh),
]

xjyn.py/views.py檢視函式內容

from django.shortcuts import render
from django.http import HttpResponse,Http404
# Create your views here.

def hh(request,year="2020",month="07"):
    return HttpResponse("獲取當前頁面的時間標籤{}年/{}月".format(year,month))

 啟動服務後,瀏覽器輸入地址: http://127.0.0.1:8000/archive/2020/7.html

正則匹配url

上面的案例雖然可以實現從url上獲取引數了,但是會遇到一個問題,年和月可以輸入各種資料,如:archive/2020/101.html,很顯然不太合理。

如果想讓year引數只能是4個數字,month引數只能是2個數字,該怎麼做呢?這就需要用到正則匹配了。

  • ?p 引數year
  • [0-9] 匹配0-9的數字
  • {4} 匹配4個數字
  • {1,2} 匹配1-2個數字
  • r是raw原型,不轉義
  • ^ 匹配開始
  • $ 匹配結束
#helloworld/helloworld/urls.py
from django.conf.urls import url
from django.urls import re_path,path
from xjyn import views

urlpatterns=[
   path("archive/<year>/<month>.html",views.hh),
    url(r'^archive1/(?P<year>[0-9]{4})/(?P<month>[0-9]{1,2}).html$',views.hh1),
]

xjyn.py/views.py檢視函式內容

from django.shortcuts import render
from django.http import HttpResponse,Http404
# Create your views here.

def hh(request,year="2020",month="07"):
    return HttpResponse("獲取當前頁面的時間標籤{}年/{}月".format(year,month))
def hh1(request,year="2020",month="07"):
    return HttpResponse("獲取當前頁面的時間標籤{}年/{}月".format(year,month))

啟動服務後,瀏覽器輸入地址:http://127.0.0.1:8000/archive1/2020/11.htmlhttp://127.0.0.1:8000/archive1/2020/1.html月份輸入2位數字或1位數字都可以。

月份輸入3位數字,報錯;

urls.py中定義name的作用

如果現在有一個a.html頁面,還有一個b.html頁面,之前兩個頁面是獨立的不想幹的,如果現在需要從a頁,點個按鈕,跳轉到b.html該如何實現?

xjyn/templates/a.html寫入以下內容;

<base href="http://127.0.0.1:8000/",target="_blank">這一句化,必須寫上,不然跳轉的b頁面時,地址異常(/a/b);
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>武漢-會</title>

    <base href="http://127.0.0.1:8000/",target="_blank">
</head>
<body>
<p>
    歡迎學習django!
    <br>
    <a href="b/">點這裡到b頁</a>
</p>
</body>
</html>

xjyn/templates/b.html寫如以下內容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>b頁面</title>
</head>
<body>
<p>
    <h4>這是我的部落格,可以百度搜:星空6</h4>
<p>越努力,越幸運</p>

</p>
</body>
</html>

xjyn/views.py檔案;函式名稱可以隨意命名,只要urls.py中,寫入對應的函式名即可;

from django.shortcuts import render
from django.http import HttpResponse,Http404
# Create your views here.

def he(request):
    return render(request,"a.html")
def hehe(request):
    return render(request,"b.html")

xjyn/urls.py檔案內容;url中的路徑可以隨意命名,訪問時,根據路徑訪問即可;

#helloworld/helloworld/urls.py
from django.conf.urls import url
from django.urls import re_path,path
from xjyn import views

urlpatterns=[
    url('^b/$',views.hehe),
    url('^a/$',views.he),

]

 如果在頁面把url地址寫死了:

<a href="b/">點這裡到b頁</a>,這樣會有個弊端,當多個頁面用到這個地址時候,如果後續這個地址變了,那就很難維護了。
為了url地址維護起來方便,可以給他起個唯一的名稱,也就是name引數,接下來在url配置里加個name名稱。
name名稱可隨意命名,網頁中與其保持一致即可;
#helloworld/helloworld/urls.py
from django.conf.urls import url
from django.urls import re_path,path
from xjyn import views

urlpatterns=[
    url('^okk/$', views.hehe,name="b_pages"),
    url('^a/$', views.he,name="a_pages"),

]

 把xjyn/templates/a.html跳轉的地址改成如下:

<a href="{% url 'b_pages' %}">b頁面</a>