美文网首页
Django reverse函数

Django reverse函数

作者: 续哥儿 | 来源:发表于2018-01-04 16:58 被阅读0次

    reverse函数
    from django.urls import reverse
    reverse 接收 url 中的 name 作为第一个参数,我们在代码中就可以通过 reverse() 来获取对应的网址(这个网址可以用来跳转,也可以用来计算相关页面的地址),只要对应的 url 的name不改,就不用改代码中的网址。
    在网页模板中也是一样,可以很方便的使用。
    不带参数的:
    {% url 'name' %}
    带参数的:参数可以是变量名
    {% url 'name' 参数 %}

    例如:
    <a href="{% url 'add2' 4 5 %}">link</a>

    上面的代码渲染成最终的页面是
    <a href="/add/4/5/">link</a>

    这样就可以通过 {% url 'add2' 4 5 %} 获取到对应的网址 /add/4/5/
    url(r'^new_add/(\d+)/(\d+)/$', calc_views.add2, name='add2'),
    注意看重点 add 变成了 new_add,但是后面的 name='add2' 没改,这时 {% url 'add2' 4 5 %} 就会渲染对应的网址成 /new_add/4/5/

    用在 views.py 或 models.py 等地方的 reverse函数,同样会根据 name 对应的url获取到新的网址。

    想要改网址的时候,修改 urls.py 中的正则表达式部分(url 参数第一部分),name 不变的前提下,其它地方都不需要修改。

    另外,比如用户收藏夹中收藏的URL是旧的,如何让以前的 /add/3/4/自动跳转到现在新的网址呢?

    要知道Django不会帮你做这个,这个需要自己来写一个跳转方法:

    具体思路是,在 views.py 写一个跳转的函数:
    from django.http import HttpResponseRedirect
    from django.core.urlresolvers import reverse # Django 1.4.x - Django 1.10.x

    from django.urls import reverse # Django 1.10.x - Django 2.x

    def old_add2_redirect(request, a, b):
    return HttpResponseRedirect(
    reverse('add2', args=(a, b))
    )

    urls.py中:
    url(r'^add/(\d+)/(\d+)/$', calc_views.old_add2_redirect),
    url(r'^new_add/(\d+)/(\d+)/$', calc_views.add2, name='add2'),

    跳转网页
    def reverse_fun_test(request):
    return redirect(reverse('hello'))

    相关文章

      网友评论

          本文标题:Django reverse函数

          本文链接:https://www.haomeiwen.com/subject/nrornxtx.html