Django-9-反向解析


在介绍URL反向解析之前,首先回顾总结一下django中出现url的位置。

URL在Django出现的位置

  • 模板层面:
    1.超链接中,例如<a href="/home">home</a>,点击后跳转到home页面
    2.表单中,例如,点击后将数据提交到home页面
  • 视图函数:通过HttpResponseRedirect(‘url’),实现页面跳转,例如302跳转

URL书写规范

在Django书写URL必须要遵循相应规则,一般有两种书写方式:

  • 1.绝对地址,例如http://127.0.0.1:8000/home/
  • 2.相对地址,从/根目录写起,避免其他错误,例如<a href="/home/page">page</a>````;假设当前页面是http://127.0.0.1:8000/home/,如果不从/目录写起,例如ok,那么点击该超链接实际上是到http://127.0.0.1:8000/home/ok```,相当于是当前网页路由目录下的资源。

模板中URL反向解析

  • 在模板和视图中通过path的路由名称来反向动态查找路由地址
  • path语法:path(url, views, name=‘url_name’),例如,```path(’/home’, views.home, name = ‘home_url’)
  • 实际上相当于将路由绑定了一个别名,而且不管路由地址怎么改,始终可以通过该名称查找到改路由地址
  • 在模板中使用url标签反向解析
{% url 'url_name' %} # 没有参数的url,位置参数
{% url 'url_name' '参数1' '参数2' ... %} # path转换器或者正则匹配

例如

{% url 'page' '100' %} 
{% url home age='18' sex='male' %}
  • 需要注意无论是int还是str path转换器,都需要写到引号中,当成字符串传递进去
  • 模板中引用实例
<body>
    <h2>
        <a href="{% url 'home' %}">home</a> # 若标签加引号,则内部的引号应该与之不同,否则会报错
        <a href={% url 'music' %}>music</a> # 或者标签不加引号也可
    </h2>
</body>

urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('/home', views.home, name='home'),
    path('/music', views.music, name='music'),
]

此时若在urls.py path更改路由地址名,会发现使用url标签的网址依然有效,会实时动态的跟新路由地址,这样的好处显而易见,我们不用为写死的路由万一发生改变,所有的路由都要手工改一次。

视图中反向解析

  • 语法
from django.urls import reverse  # 反向解析路由

reverse('别名', args=[], kwargs=[])
# eg:
print(reverse('home', args=[300]))
print(reverse('home', kwargs={'age': 18, 'sex': 'male'}))

参考

达内教育

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值