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中zip()函数用法实例教程
Jul 31 Python
学习python类方法与对象方法
Mar 15 Python
python web.py开发httpserver解决跨域问题实例解析
Feb 12 Python
TensorFlow模型保存/载入的两种方法
Mar 08 Python
Python中property函数用法实例分析
Jun 04 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
Feb 27 Python
Python 脚本的三种执行方式小结
Dec 21 Python
Pytorch 数据加载与数据预处理方式
Dec 31 Python
Python图像处理库PIL的ImageGrab模块介绍详解
Feb 26 Python
Python文件时间操作步骤代码详解
Apr 13 Python
keras打印loss对权重的导数方式
Jun 10 Python
使用pd.merge表连接出现多余行的问题解决
Jun 16 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
在数据量大(超过10万)的情况下
2007/01/15 PHP
PHP中冒号、endif、endwhile、endfor使用介绍
2010/04/28 PHP
PHP封装的MSSql操作类完整实例
2016/05/26 PHP
利用switch语句进行多选一判断的实例代码
2016/11/14 PHP
兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
2009/07/14 Javascript
javascript qq右下角滑出窗口 sheyMsg
2010/03/21 Javascript
javascript动态控制服务器控件实例
2014/09/05 Javascript
Jquery动态替换div内容及动态展示的方法
2015/01/23 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
利用Node.js对文件进行重命名
2017/03/12 Javascript
bootstrap table表格使用方法详解
2017/04/26 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
Webpack中publicPath路径问题详解
2018/05/03 Javascript
vue与原生app的对接交互的方法(混合开发)
2018/11/28 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
微信小程序实现form表单本地储存数据
2019/06/27 Javascript
ES6基础之 Promise 对象用法实例详解
2019/08/22 Javascript
Openlayers学习之加载鹰眼控件
2020/09/28 Javascript
Selenium执行JavaScript脚本的方法示例
2020/12/31 Javascript
[16:27]DOTA2 HEROS教学视频教你分分钟做大人-艾欧
2014/06/11 DOTA
[01:53]2016完美“圣”典风云人物:Maybe专访
2016/12/05 DOTA
[01:04:32]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第二场 2月23日
2021/03/11 DOTA
pandas apply 函数 实现多进程的示例讲解
2018/04/20 Python
使用Tkinter制作信息提示框
2020/02/18 Python
Python importlib动态导入模块实现代码
2020/04/16 Python
通过Python实现一个简单的html页面
2020/05/16 Python
HTMl5的存储方式sessionStorage和localStorage详解
2014/03/18 HTML / CSS
加拿大领先家居家具网上购物:Aosom.ca
2020/05/27 全球购物
连锁酒店店长职责范本
2014/02/13 职场文书
部队万能检讨书
2014/02/20 职场文书
工地安全质量标语
2014/06/07 职场文书
政府采购方案
2014/06/12 职场文书
工作期间打牌检讨书范文
2014/11/20 职场文书
通讯稿格式及范文
2015/07/22 职场文书
护士爱岗敬业心得体会
2016/01/25 职场文书
2016创先争优活动党员公开承诺书
2016/03/24 职场文书