框架Python

十四 Django-反向解析

2019-02-28  本文已影响7人  唯老

反向解析

一、概念

随着功能的增加会出现更多的视图,可能之前配置的正则表达式不够准确,于是就要修改正则表达式,但是正则表达式一旦修改了,之前所有对应的超链接都要修改,真是一件麻烦的事情,而且可能还会漏掉一些超链接忘记修改,有办法让链接根据正则表达式动态生成吗? 就是用反向解析来解决

二、主要作用

  1. 配合模板语法url使用
  2. 在python代码中配合重定向使用

三、使用

1、前期准备工作

  1. 在urls.py中
    url(r’路径’,视图函数或者视图类,name='别名'),
    
    url(r’根路径’,include(‘二级路由路径’, namespace=’命名空间’)),
    # 二级路径
    url(r’二级路径’, 视图函数或者视图类, name='别名'),
    
  2. 说明
    • name
      反向解析的名称
    • namespace
      非必要,当我们的二级路由中name有相同的时候,需要用到该参数

2、模板中超链接使用

  1. 语法格式
    # 直接使用别名
     {% url "url_name" arg1 arg2 %}
    
    # 使用命名空间+别名
    {% url '[命名空间]:别名' }
    
    # 动态路由带参数
    {% url '[命名空间]:别名' 参数 参数}
    
  2. 示例代码-基础使用
    • 在urls.py中
      url(r'base/', views.reverse_base, name='base'),
      
    • 视图函数中
      def reverse_base(request):
          return render(request, 'base.html')
      
    • 在templates中
      <a href="/base/">普通链接写法</a>
      <a href="{% url 'base' %}">反向解析基础使用</a>
      
  3. 示例代码-命名空间
  1. 示例代码-带参数
    • url
      # 根路由
      url('reverse/', include('reverse_ex.urls', namespace='reverse')),
      #二级理由
      url(r'params/(\d+)/(\d+)/', views.reverse_index, name='params'),
      
    • 视图函数
      def reverse_params(request, page, size):
          return render(request, 'reverse_params.html')
      
    • 在模板中
      # 直接使用路径
      <a href="/reverse/params/1/10/">反向解析带参数普通链接</a><br>
      # 使用反向解析
      <a href="{% url 'reverse:params' 1 10 %}">反向解析带参数</a><br>
      

3、在视图函数中配合reverse使用

  1. 语法格式
    reverse(viewname, args=None, kwargs=None)
    
  2. 参数说明
    • viewname
      视图函数的名字或者索引名
    • args
      动态路径的参数
    • kwargs
      动态路径的关键字参数,不要和args同时使用
  3. 示例代码
    • urls.py中
      url('index/', views.reverse_index,name='index'),
      
    • 视图函数
      def redirect_reverse(request):
          # 通过路由中的别名(索引名)
          base = reverse('index')  # /index/
          # 通过视图函数名
          path_base = reverse(views.pg_list)  #
          # 普通动态路由 反向解析
          patt_params = reverse('reverse:params', args=[1, 10])
          # 关键字动态路由反向解析
          path_kw = reverse('reverse:kw', kwargs={'id': 1})
          return redirect(base)
      
上一篇 下一篇

猜你喜欢

热点阅读