Django-带参数的路由编写(一)【不用正则表达式匹配的简单带参数路由】

在某urls.py文件有如下的路由配置语句:

urlpatterns = [
    path('app2/show//',views.show_id),
]

语句:

 path('app2/show//',views.show_id),

中的就是带参数的URL中的参数部分,其语法格式如下:
<参数数据类型:参数名称>
URL参数有4种数据类型,如下表所示:
Django-带参数的路由编写(一)【不用正则表达式匹配的简单带参数路由】_第1张图片
提问:
Django的URL参数中的str类型和slug类型有什么区别?感觉都是对字符串的匹配啊!
答:
在Django中,URL参数中的str类型和slug类型都用于匹配字符串,但它们有一些细微的区别。

str类型是最常用的URL参数类型,它接受任何字符,包括字母、数字和特殊字符。使用str类型的URL参数,Django将匹配并传递任何非空字符串作为参数的值。

slug类型也用于匹配字符串,但它有一些额外的限制。slug类型只接受字母、数字、连字符和下划线,通常用于表示URL友好的字符串。当使用slug类型的URL参数时,Django会自动将特殊字符转换为连字符,并忽略额外的空格或特殊字符。

区别在于,slug类型对URL友好的字符串进行了约束,仅接受特定字符,并进行了自动转换。这使得slug类型的URL参数更适合在URL中使用,例如用于博客文章的短链接。而str类型更通用,可以接受任何非空字符串作为参数的值。

总结起来,str类型接受任何字符串,而slug类型仅接受包含字母、数字、连字符和下划线的字符串,并对特殊字符进行了自动转换。选择使用哪种类型取决于你的需求和URL参数的预期格式。

下面是一个实例:
E:\Python_project\P_001\myshop-test\myshop\myshop\urls.py 中的代码:

from django.urls import path, include
from app1 import views

urlpatterns = [
    path('article//', views.show_num),
    path('article//', views.show_chars),
]

E:\Python_project\P_001\myshop-test\myshop\app1\views.py 中的代码:

from django.shortcuts import render  # 默认导入的模块
from django.http import HttpResponse  # 导入HttpResponse模块

# Create your views here.


def show_num(request, num):
    return HttpResponse('show_id方法,参数为num,值为'+str(num))


def show_chars(request, chars):
    return HttpResponse('show_chars方法,参数为chars,值为'+str(chars))

运行Django应用:

CD E:\Python_project\P_001\myshop-test\myshop
E:
python manage.py runserver 127.0.0.1:8022

浏览器中访问下面这些URL路径:

http://127.0.0.1:8022/article/3159/
http://127.0.0.1:8022/article/2120/

http://127.0.0.1:8022/article/hkas/
http://127.0.0.1:8022/article/ej3yh8/

运行效果如下:
Django-带参数的路由编写(一)【不用正则表达式匹配的简单带参数路由】_第2张图片
Django-带参数的路由编写(一)【不用正则表达式匹配的简单带参数路由】_第3张图片
Django-带参数的路由编写(一)【不用正则表达式匹配的简单带参数路由】_第4张图片
Django-带参数的路由编写(一)【不用正则表达式匹配的简单带参数路由】_第5张图片

延伸阅读:
Django-带参数的路由编写(二)【用正则表达式匹配复杂路由】

你可能感兴趣的:(Django,django)