urls参数

嵌套参数

  • 捕获某个参数的一部分
  • 例如/index/3,需要捕获3 ```python

    urls.py

    path(‘app/‘, v.url_index),

views.py

def url_index(request, index): return HttpResponse(“返回的参数名是index,它的值是: {}”.format(index))

  1. - 运行
  2. <br />![](https://cdn.nlark.com/yuque/0/2019/png/367873/1559636472366-2d13c742-9e4e-4231-84c1-f1b418d15a50.png#align=left&display=inline&height=97&originHeight=97&originWidth=314&size=0&status=done&width=314)
  3. <a name="2171d1b0"></a>
  4. ### 默认参数
  5. - 可以给视图函数的传递参数设置一个默认值,这样`path()`中传递的参数就可以不用写
  6. ```python
  7. # urls.py
  8. urlpatterns = [
  9. path('default/', v.default_param),
  10. path('default/<int:param>', v.default_param),
  11. ]
  1. #views.py
  2. book = [
  3. "页面1",
  4. "页面2",
  5. "页面3",
  6. "页面4",
  7. ]
  8. def default_param(request, param=0):
  9. return HttpResponse(book[param])
  • 运行
    参数介绍 - 图1
    参数介绍 - 图2

传递额外参数

  • 参数不仅仅来自URL,还可能是自己定义的内容 ```python

    urls.py

    path(‘app/extra/‘, v.url_extra, {“extra”: “nothing”}),

views.py

def url_extra(request, extra): return HttpResponse(“返回的额外参数名是extra, 它的值是: {}”.format(extra))

  1. - 运行
  2. <br />![](https://cdn.nlark.com/yuque/0/2019/png/367873/1559636472500-0add0e59-bc01-416b-91f4-4af0e6aba520.png#align=left&display=inline&height=111&originHeight=111&originWidth=358&size=0&status=done&width=358)
  3. <a name="cb71799e"></a>
  4. ### 查询字符串
  5. - URL中,不需要单独的匹配查询字符串的部分。只需要在视图函数中使用`request.GET.get("参数名")`的方式来获取 。因为查询字符串使用的是`GET`请求,所以我们通过`request.GET`来获取参数,并且因为`GET`是一个类似于字典的数据类型,获取值的方式和字典一样。
  6. ```python
  7. # urls.py
  8. path('app/query/', v.url_query),
  9. #views.py
  10. def url_query(request):
  11. variable = request.GET.get("id") # 获得键id所对应的值
  12. return HttpResponse("返回的查询字符串是: {}".format(variable))
  • 运行
    参数介绍 - 图3

url的反向编码

  • 防止硬编码
  • 本质上是对每一个url进行命名
  • 以后在编码代码中使用中URL的值,原则上都应该使用反向解析
  1. # urls.py
  2. path('app/reverse/', v.url_reverse, name="jack"),
  3. # views.py
  4. from django.urls import reverse #从1.10.*开始从django.urls包导入
  5. def url_reverse(request):
  6. url_name = reverse("jack")
  7. return HttpResponse("返回的url是: {}".format(url_name))
  • 运行
    参数介绍 - 图4
  • 此时更改URL

    1. path('app/R/', v.url_reverse, name="jack"),
    • 运行
      参数介绍 - 图5