Django 路由详解(二)

 路由变量

有时候一个路由可以代表多个不同的页面,如果每个页面都要设置一个路由配置,这种做法明显不可取,在Django在定义路由时,可以对路由设置变量,使路由具有多样性。

路由的变量类型有字符类型、整形、slug和uuid,最为常用的是字符类型和整型。各个类型说明如下:

  • 字符类型:匹配任何非空字符串,但不含斜杠。如果没有指定类型,就默认使用该类型。
  • 整型:匹配0和正整数。
  • slug:可理解为注释、后缀附属等概念,常作为路由的解释性字符。可匹配任何ASCII字符以及连接符和下划线,能使路由更加清晰易懂。比如网页的标题是“13岁的孩子”,其路由地址可设置为“13-sui-de-hai-zi”。
  • uuid:匹配一个uuid格式的对象。为了防止冲突,规定必须使用“-”并且所有字母必须小写,例如:0b1e7883-5ab4-4b71-8d3c-56bc71b680a2

在路由中,使用变量符号<>可以为路由设置变量,在括号里面以冒号划分为两部分,冒号前面为变量的数据类型,冒号后面为变量名,如果没有设置变量的数据类型,则默认为字符串类型。

以下代码是带有字符串、整型和slug的变量:

#myapp urls.py
from django.urls import path,re_path
# from myapp.views import myapp_index,new
from . import views

urlpatterns = {
    #配置myapp应用路由地址,指向myapp的views.py中的视图函数myapp_index
    path("",views.myapp_index),
    path("new/",views.new),
    path("<year>/<int:month>/<slug:day>",views.timeView)
}
  • <year>: 变量名为year,数据类型为字符串类型,与<str:year>含义一样。
  • <int:month>: 变量名为month,数据类型为整型。
  • <slug:day>: 变量名为day,数据类型为slug。

在views.py中的视图函数timeView代码如下:

from urllib import response
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.

def timeView(request,year,month,day):
    return HttpResponse(str(year)+"/"+str(month)+"/"+str(day))

其中参数year、month、day的参数值分别从路由地址所设置的变量<year>、<int:month>、<slug:day>而来.

在浏览器上的效果如下:

 

 修改浏览器上的地址,再次访问效果如下:

 

路由可选变量

路由可选变量是在访问地址时,可以不用传变量。代码如下:

#myapp urls.py
from calendar import month
from django.urls import path,re_path
# from myapp.views import myapp_index,new
from . import views
import time


urlpatterns = {
    #配置myapp应用路由地址,指向myapp的views.py中的视图函数myapp_index
    path("",views.myapp_index),
    path("new/",views.new),
    path("<year>/<int:month>/<slug:day>",views.timeView),
    path("time/",views.Option_variable,{"current_time":time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time())) }),
}
  • 参数只能以字典的形式表示。
  • 设置的参数只能在视图函数中读取和使用。
  • 字典的一个键值对代表一个参数,键值对的键代表参数名,键值对的值代表参数值。
  • 参数值没有数据格式限制,可以为某个实例对象、字符串或列表(元组)等。

 在浏览器中访问效果如下:

 

posted @ 2022-03-28 23:43  西夏一品唐  阅读(112)  评论(0编辑  收藏  举报