欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Django2.0-urls(5)-include(),re_path(),reverse()

程序员文章站 2022-06-06 08:44:02
...

include

  • include()函数有三种方式形式:

    • include(module, namespace=None)

      • module:子URL的模块字符串
      • namespace:实例命名空间。继续注意需要向指定应用命名空间,就是在子urls.py中添加app_name变量
    • include ((pattern_list, app_namesapce), namespace=None)

      • pattern_list: 一个元组:(另外一个'urls.py', 应用命名空间)
      • namespace: 命名空间
      • 即应用命名空间既可以在子urls.py中,也可以在include函数指定
    • include (pattern_list)

      • pattern_list: 是一个list,装的是path()或者re_path

      • 代码

        urlpatterns = [
            path (r"index/", include(
            	path("", views.index_page),
                path("02/", views.index_02),
            ))
        ]
        

        可以不同在子urls.py中指定子URL。

  • 一般都使用第一种include()

re_path

  • 作用和path()一样。
  • re_path()的第一个参数可以使用正则表达式
  • 正则表达式推荐使用原生字符串,即r"正则表达式"
  • 在正则表达式中定义变量,需要使用圆括号括起来。
    • 参数的定义: ?P<variable_name>
    • 在后面添加正则表达式的规则
  • 类似Django1.8的url()函数

reverse

  • 如果在翻转URL的时候,需要添加参数,可以在reverse()中传递kwargs参数

    # 主urls.py
    app_name = "CMS"
    
    path('reverse/', include("CMS.urls")),
    
    # app的urls.py
    
    path('index', views.do_index),
    path('index/<name>/<age>', views.do_param, name="withName"),
    
    # views.py
    def do_index(request):
        return redirect(reverse("CMS:withName", kwargs={"name": "jack", "age": 22}))
    	# 注意!reverse参数的name如果在创建前有定义应用命名空间,就需要 应用命名:url_name 的格式
    def do_param(request, name, age):
        return HttpResponse("param name is {}, age is {}".format(name, age))
    
    • 运行 键入127.0.0.0.1:8000/index则跳转127.0.0.0.1:8000/index/jack/22
  • 如果想要添加查询字符串的参数,则必须手动进行拼接