URLconf

  • 浏览者通过在浏览器的地址栏中输入网址请求网站
  • 对于Django开发的网站,由哪一个视图进行处理请求,是由url匹配找到的

配置URLconf

  • 1.settings.py

    • 指定url配置

      ROOT_URLCONF = '项目.urls'
      
  • 2.项目中urls.py

    • 匹配成功后,包含到应用的urls.py

      url(正则, include('应用.urls'))
      
  • 3.应用中urls.py

    • 匹配成功后,调用views.py对应的函数

      url(正则, views.函数名)
      
  • 4.提示

      1. 正则部分推荐使用 r,表示字符串不转义,这样在正则
      表达式中使用 \ 只写一个就可以
    
      2. 不能在开始加反斜杠,推荐在结束加反斜杠
          正确:path/
          正确:path
          错误:/path
          错误:/path/
    
      3. 请求的url被看做是一个普通的python字符串,进行匹配时不包括域名、get或post参数
          3.1 如请求地址如下:
              http://127.0.0.1:8000/18/?a=10
          3.2 去掉域名和参数部分后,只剩下如下部分与正则匹配
              18/
    

URL中取值

  • 如果想从URL中获取值,需要在正则表达式中使用分组
  • 获取值分为两种方式
    • 位置参数
      • 参数的位置不能错
    • 关键字参数
      • 参数的位置可以变,跟关键字保持一致即可
  • 注意:两种参数的方式不要混合使用,在一个正则表达式中只能使用一种参数方式
  • 分别使用以上两种获取URL值的方式提取出18 188
    • http://127.0.0.1:8000/18/188/

位置参数

  • 应用中urls.py

      url(r'^(\d+)/(\d+)/$', views.index),
    
  • 视图中函数: 参数的位置不能错

      def index(request, value1, value2):
          # 构造上下文
          context = {'v1':value1, 'v2':value2}
          return render(request, 'Book/index.html', context)
    

关键字参数

  • 应用中urls.py

    • 其中?P<value1>部分表示为这个参数定义的名称为value1
    • 可以是其它名称,起名要做到见名知意

      url(r'^(?P<value1>\d+)/(?P<value2>\d+)/$', views.index),
      
  • 视图中函数: 参数的位置可以变,跟关键字保持一致即可

      def index(request, value2, value1):
          # 构造上下文
          context = {'v1':value1, 'v2':value2}
          return render(request, 'Book/index.html', context)