Django模板标签中url使用详解(url跳转到指定页面)


Posted in Python onMarch 19, 2020

django {% url %} 模板标签使用

inclusions/_archives.html

...
{% for date in date_list %}
<li>
<a href="{% url 'blog:archive' date.year date.month %}" rel="external nofollow" >
{{ date.year }} 年 {{ date.month }} 月
</a>
</li>
{% endfor %}
...

这里 {% url %} 这个模板标签的作用是解析视图函数 blog:archive 对应的 URL 模式,并把 URL 模式中的年和月替换成 date.year,date.month 的值。

{% url %} 模板标签接收的第一个参数为被解析视图函数的端点值,这个端点值由 2 部分组成,中间由冒号分隔。第一部分为在应用的 urls.py 中指定的 app_name 的值(充当命名空间,这样即使不同 app 下有相同的视图函数名,也不会冲突),第二部分 path 函数中传入的 name 参数的值。比如在 blog 应用的 urls.py 模块,我们指定了 app_name = 'blog',archive 视图函数的 url 模式为 path('archives/<int:year>/<int:month>/', views.archive, name='archive'),因此对应的端点值为 blog:archive。

{% url %} 模板标签接收的其它参数为 URL 路径参数,即 URL 模式中路径参数转换器需要捕获的值。例如 archive 视图函数对应的 URL 模式为 archives/<int:year>/<int:month>/,假设 date.year=2017,date.month=5,那么 {% url 'blog:archive' date.year date.month %} 模板标签返回的值为 /archives/2017/5/。

为什么要使用 {% url %} 模板标签呢?事实上,我们把超链接的 href 属性设置为 /archives/{{ date.year }}/{{ date.month }}/ 同样可以达到目的,但是这种写法是硬编码的。虽然现在 blog:archive 视图函数对应的 URL 模式是这种形式,但是如果哪天这个模式改变了呢?如果使用了硬编码的写法,那你需要把每一处 /archives/{{ date.year }}/{{ date.month }}/ 修改为新的模式。但如果使用了 {% url %} 模板标签,则不用做任何修改。

示例

1、主urls.py文件配置如下:

from django.urls import path
from django.conf.urls import include
 
from myblog import views
urlpatterns = [
 
  path('', views.index), 
  path('myblog/', include('myblog.urls')),
]

2、APP的urls.py文件配置如下:

from django.urls import path
from myblog import views
 
urlpatterns = [
 
  path('', views.index), 
 
  path('login/', views.login, name='login'), # 这里设置name,为了在模板文件中,写name,就能找到这个路由
  path('book/', views.book, name='book'),
  path('movie/', views.movie, name='movie'),
  path('book/detail/<book_id>/<catgray>/', views.book_detail, name='detail'),
 
]

3、APP的views.py文件如下:

from distutils.command import register
 
from django.shortcuts import render, reverse, redirect
from django.http import HttpResponse
 
 
def index(request):
  return render(request, 'index.html', {'articles': 18})
 
def login(request):
  return HttpResponse("注册页面")
 
def book(request):
  return HttpResponse("读书页面")
 
 
def movie(request):
  return HttpResponse("电影页面")
 
 
def book_detail(request, book_id, catgray):
  text = '文章详情页,该文章ID是:%s,分类是:%s' % (book_id, catgray)
  return HttpResponse(text)

4、index.html文件如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
 
 
<ul>
  <li><a href="/" rel="external nofollow" >首页</a></li>
 
  <li><a href="{% url 'login' %}?next=asd/ " rel="external nofollow" >登录</a></li>
  # 点读书就会调到,读书页,路径
  <li><a href="{% url 'book' %}" rel="external nofollow" rel="external nofollow" >读书</a></li>
  # 在这里,直接写name,就能找到urls文件中对应的路由
  <li><a href="{% url 'book' %}" rel="external nofollow" rel="external nofollow" >读书</a></li>
 
  <li><a href="{% url 'movie' %}" rel="external nofollow" >电影</a></li>
 
  <li><a href="{% url 'detail' book_id='1' catgray=2 %}" rel="external nofollow" >最火的一篇文章</a></li>
</ul>
 
</body>
</html>

到此这篇关于Django模板标签中url使用详解(url跳转到指定页面)的文章就介绍到这了,更多相关Django url使用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
零基础写python爬虫之urllib2使用指南
Nov 05 Python
Python中设置变量访问权限的方法
Apr 27 Python
python 实现判断ip连通性的方法总结
Apr 22 Python
Python解决八皇后问题示例
Apr 22 Python
python 按钮点击关闭窗口的实现
Mar 04 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
Apr 26 Python
Django中的AutoField字段使用
May 18 Python
python实现mask矩阵示例(根据列表所给元素)
Jul 30 Python
python 中的9个实用技巧,助你提高开发效率
Aug 30 Python
Python在线和离线安装第三方库的方法
Oct 31 Python
Python爬虫破解登陆哔哩哔哩的方法
Nov 17 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
Nov 17 Python
关于Python turtle库使用时坐标的确定方法
Mar 19 #Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
Mar 19 #Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
Mar 19 #Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
Mar 19 #Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
Mar 19 #Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
Mar 18 #Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
Mar 18 #Python
You might like
解析ajax事件的调用顺序
2013/06/17 PHP
php实现httpRequest的方法
2015/03/13 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)
2010/06/11 Javascript
js获取或设置当前窗口url参数的小例子
2013/10/14 Javascript
jquery鼠标停止移动事件
2013/12/21 Javascript
javascript将相对路径转绝对路径示例
2014/03/14 Javascript
引入autocomplete组件时JS报未结束字符串常量错误
2014/03/19 Javascript
Javascript中对象继承的实现小例
2014/05/12 Javascript
使用jquery菜单插件HoverTree仿京东无限级菜单
2014/12/18 Javascript
jQuery热气球动画半透明背景的后台登录界面代码分享
2015/08/28 Javascript
bootstrap配合Masonry插件实现瀑布式布局
2017/01/18 Javascript
Angular2开发——组件规划篇
2017/03/28 Javascript
详解nodejs微信jssdk后端接口
2017/05/25 NodeJs
js链表操作(实例讲解)
2017/08/29 Javascript
JavaScript函数绑定用法实例分析
2017/11/14 Javascript
详解从NodeJS搭建中间层再谈前后端分离
2018/11/13 NodeJs
JS数据类型STRING使用实例解析
2019/12/18 Javascript
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
python调用c++传递数组的实例
2019/02/13 Python
Python爬虫——爬取豆瓣电影Top250代码实例
2019/04/17 Python
在VS2017中用C#调用python脚本的实现
2019/07/31 Python
PyQt Qt Designer工具的布局管理详解
2019/08/07 Python
python实现截取屏幕保存文件,删除N天前截图的例子
2019/08/27 Python
python 怎样将dataframe中的字符串日期转化为日期的方法
2019/09/26 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
2021/02/02 Python
美国著名的家居用品购物网站:Bed Bath & Beyond
2018/01/05 全球购物
《蜗牛》教学反思
2014/02/18 职场文书
幼儿园社区活动总结
2014/07/07 职场文书
领导班子个人查摆问题对照检查材料
2014/10/02 职场文书
上课迟到检讨书300字
2014/10/15 职场文书
2014年个人师德工作总结
2014/12/04 职场文书
小学六年级班主任工作经验交流材料
2015/11/02 职场文书
幼儿体育课教学反思
2016/02/16 职场文书
干货:我将这样书写我的演讲稿!
2019/05/09 职场文书