Django默认Path转换器

    str:匹配任何非空字符串,但不含斜杠/,如果你没有专门指定转换器,那么这个是默认使用的;
    int:匹配0和正整数,返回一个int类型
    slug:可理解为注释、后缀、附属等概念,是url拖在最后的一部分解释性字符。该转换器匹配任何ASCII字符以及连接符和下划线,比如’ building-your-1st-django-site‘;
    uuid:匹配一个uuid格式的对象。为了防止冲突,规定必须使用破折号,所有字母必须小写,例如’075194d3-6885-417e-a8a8-6c931e272f00‘ 。返回一个UUID对象;
    path:匹配任何非空字符串,重点是可以包含路径分隔符’/‘。这个转换器可以帮助你匹配整个url而不是一段一段的url字符串  

Django Path转换器自定义及正则代码实例
    
step1 . 在urls.py 的同级目录下,创建converters.py
class Year_Converters():
  regex = '\d{4}'
  def to_python(self,value):
    return int(value)

  def to_url(self,value):
    # return ;04d' % value
    return str(value)
step 2 注册converters 在同级urls,py 文件
from django.urls import path,register_converter
from . import views
from . import converters

#注册转换器
register_converter(converters.Year_Converters,'year')
urlpatterns = [
  path('show1/<year:arg>', views.show1),
]    

正则 在urls,py 文件中,注意参数需要加() ,这里的参数是元组
from django.urls import re_path
urlpatterns = [
  re_path('article/(\d+)/', views.index),
]

注册自定义的路径转换器¶

对于更复杂的匹配需求,你能定义你自己的路径转换器。

转换器是一个类,包含如下内容:

    字符串形式的 regex 类属性。
    to_python(self, value) 方法,用来处理匹配的字符串转换为传递到函数的类型。如果没有转换为给定的值,它应该会引发 ValueError 。ValueError 说明没有匹配成功,因此除非另一个 URL 模式匹配成功,否则会向用户发送404响应。
    一个 to_url(self, value) 方法,它将处理 Python 类型转换为字符串以用于 URL 中。如果不能转换给定的值,它应该引发 ValueError。ValueError 被解释为无匹配项,因此 reverse() 将引发 NoReverseMatch,除非有其他 URL 模式匹配。

例如:

class FourDigitYearConverter:
    regex = "[0-9]{4}"

    def to_python(self, value):
        return int(value)

    def to_url(self, value):
        return "%04d" % value

在 URLconf 中使用 register_converter() 来注册自定义的转换器类:

from django.urls import path, register_converter

from . import converters, views

register_converter(converters.FourDigitYearConverter, "yyyy")

urlpatterns = [
    path("articles/2003/", views.special_case_2003),
    path("articles/<yyyy:year>/", views.year_archive),
    ...,
]

5.1 版后已移除: Overriding existing converters with django.urls.register_converter() is deprecated.
posted on 2024-08-27 16:02  Old-Kang  阅读(8)  评论(0编辑  收藏  举报