zoukankan      html  css  js  c++  java
  • jdango 2.x的url配置的改变

    新版本的url.py文件中,不在使用1.x的正则表达式,强制使用在程序启动的时候会提示:

    WARNINGS:
    ?: (2_0.W001) Your URL pattern '^*article/' has a route that contains '(?P<', begins with a '^', or ends with a '$'. This was likely an oversight when migrating to django.urls.path().
    

    1.x的写法

    urlpatterns = [
        url('admin/', admin.site.urls),
        url('^*article/$', include('article.urls'))
    ]
    

    2.x中如果要使用正则,则需要使用re_path方法

    from django.urls import path, include, re_path
    urlpatterns = [
        path('admin/', admin.site.urls),
        re_path('^.*article/$', include('xxx.urls'))
    ]
    
    1. 要捕获url中的一段查询字符串,除了使用正则匹配以外,现在可以使用<>,而不是原来的()
    2. 在<>中捕获的url查询字符串,可以指定类型, 比如 path('articles/<int:year>/', views.year_archive),
      就可以将articles后面的数字匹配出来,用year参数名传递给后台,默认情况下捕获的结果保存的是字符串类型,不包含 / 这个特殊字符
    3. 匹配模式的最开头不需要添加/,因为默认情况下,每个url都带一个最前面的/
     path('articles/<int:year>/<int:month>/', views.month_archive),
    /articles/2005/03/ 将匹配第三条,并调用views.month_archive(request, year=2005, month=3);
    
    

    path转换器
    django2.x中内置了路径转换器

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

    re_path

    re_path('articles/(?P<year>[0-9]{4})/', views.year_archive),
    re_path('articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/', views.month_archive),
    re_path('articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-_]+)/', 
    

    传递给视图的所有参数都是字符串类型

  • 相关阅读:
    codeforces-1139 (div2)
    codeforces-1140 (div2)
    codeforces-1141 (div3)
    第四届CCCC团体程序设计天梯赛 后记
    BZOJ 3674 可持久化并查集
    你能回答这些问题吗
    [JSOI2008]最大数
    关路灯
    愤怒的小鸟
    推销员
  • 原文地址:https://www.cnblogs.com/cizao/p/11481881.html
Copyright © 2011-2022 走看看