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
      • 代码

        1. urlpatterns = [
        2. path (r"index/", include(
        3. path("", views.index_page),
        4. path("02/", views.index_02),
        5. ))
        6. ]

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

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

re_path

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

reverse

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

    主urls.py

    app_name = “CMS”

path(‘reverse/‘, include(“CMS.urls”)),

  1. ```python
  2. # app的urls.py
  3. path('index', views.do_index),
  4. path('index/<name>/<age>', views.do_param, name="withName"),
  1. # views.py
  2. def do_index(request):
  3. return redirect(reverse("CMS:withName", kwargs={"name": "jack", "age": 22}))
  4. # 注意!reverse参数的name如果在创建前有定义应用命名空间,就需要 应用命名:url_name 的格式
  5. def do_param(request, name, age):
  6. 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
    • 如果想要添加查询字符串的参数,则必须手动进行拼接