django最新版url默认不支持正则,标准格式:
path('admin/', admin.site.urls),
如果需要使用正则,需要导入:re_path,使用方法:
from django.urls import path,re_path
urlpatterns = [
path('admin/', admin.site.urls),
re_path(r'^test-(\d+)-(\d+)/', views.test),
path('index/', views.index),
]
示例:
1.urls.py
urlpatterns = [
path('admin/', admin.site.urls),
#re_path(r'^test-(\d+)-(\d+)/', views.test), #普通写法,函数参数必须严格按照顺序获取数值
re_path(r'^test-(?P<v1>\d+)-(?P<v2>\d+)/', views.test), #分组写法,函数参数可以随意调换位置
path('index/', views.index),
]
2.views.py
#第一种写法,严格按照顺序获取参数值
# def test(request,v1,v2):
# print(v1,v2)
# return render(request,"index.html")
#第二种写法,按照key获取value,参数只能是两个
# def test(request,v2,v1):
# print(v1,v2)
# return render(request,"index.html")
#第三种写法,**kwargs可以获取多个键值对
# **kwargs获取字典的值,*args获取元组的值
def test(request,*args,**kwargs):
for k,v in kwargs.items():
temp = int(v)
kwargs[k]=temp
if temp:
print(temp)
print(kwargs)
print("v1",kwargs["v1"])
print("v2",kwargs["v2"])
return render(request,"index.html")
def index(request):
return render(request,"index.html")
3.Templates
<p><a href="/test-3-2">点我测试url1</a></p>
<p><a href="/test-3-1">点我测试url2</a></p>
<p><a href="/test-5-6">点我测试url3</a></p>
4.执行结果:
3 2
[04/Dec/2018 22:41:44] "GET /test-3-2/ HTTP/1.1" 200 269
3 1
[04/Dec/2018 22:41:48] "GET /test-3-1/ HTTP/1.1" 200 269
5 6
[04/Dec/2018 22:41:49] "GET /test-5-6/ HTTP/1.1" 200 269
{'v1': 5, 'v2': 6}
v1 5
v2 6
[04/Dec/2018 23:05:09] "GET /test-5-6/ HTTP/1.1" 200 269
views获取值的三种写法:
#第一种写法,严格按照顺序获取参数值 # def test(request,v1,v2): # print(v1,v2) # return render(request,"index.html") #第二种写法,按照key获取value,参数只能是两个 # def test(request,v2,v1): # print(v1,v2) # return render(request,"index.html") #第三种写法,**kwargs可以获取多个键值对 # **kwargs获取字典的值,*args获取元组的值 def test(request,*args,**kwargs): for k,v in kwargs.items(): temp = int(v) kwargs[k]=temp if temp: print(temp) print(kwargs) print("v1",kwargs["v1"]) print("v2",kwargs["v2"]) return render(request,"index.html") def index(request): return render(request,"index.html")