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 开发者应从2.x还是3.x着手?
Nov 16 Python
python用户评论标签匹配的解决方法
May 31 Python
python实现监控某个服务 服务崩溃即发送邮件报告
Jun 21 Python
Python txt文件加入字典并查询的方法
Jan 15 Python
Python 实现两个服务器之间文件的上传方法
Feb 13 Python
python SVM 线性分类模型的实现
Jul 19 Python
pytorch实现从本地加载 .pth 格式模型
Feb 14 Python
Django Model中字段(field)的各种选项说明
May 19 Python
python实现最短路径的实例方法
Jul 19 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
Oct 19 Python
python使用PySimpleGUI设置进度条及控件使用
Jun 10 Python
Python之matplotlib绘制饼图
Apr 13 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
PHP脚本数据库功能详解(上)
2006/10/09 PHP
php 文本文件的读取效率
2012/02/10 PHP
php+xml结合Ajax实现点赞功能完整实例
2015/01/30 PHP
PHP使用mkdir创建多级目录的方法
2015/12/22 PHP
PHP浮点数的一个常见问题
2016/03/10 PHP
PHPStrom 新建FTP项目以及在线操作教程
2016/10/16 PHP
PHP进阶学习之命名空间基本用法分析
2019/06/18 PHP
帮助避免错误的Javascript陷阱清单
2009/05/31 Javascript
javascript for循环从入门到偏门(效率优化+奇特用法)
2012/08/01 Javascript
JS打开新窗口的2种方式
2013/04/18 Javascript
浅谈JavaScript字符集
2014/05/22 Javascript
JavaScript操作HTML元素和样式的方法详解
2015/10/21 Javascript
原生JavaScript编写canvas版的连连看游戏
2016/05/29 Javascript
vue分页组件table-pagebar使用实例解析
2020/11/15 Javascript
js判断所有表单项不为空则提交表单的实现方法
2016/09/09 Javascript
react-native 完整实现登录功能的示例代码
2017/09/11 Javascript
vue-router懒加载速度缓慢问题及解决方法
2018/11/25 Javascript
vue+elementUI实现表格关键字筛选高亮
2020/10/26 Javascript
jquery插件开发模式实例详解
2019/07/20 jQuery
laydate只显示时分 不显示秒的功能实现方法
2019/09/28 Javascript
[03:07]完美世界DOTA2联赛PWL DAY10 决赛集锦
2020/11/11 DOTA
Python中unittest模块做UT(单元测试)使用实例
2015/06/12 Python
如何将python中的List转化成dictionary
2016/08/15 Python
python实现可以断点续传和并发的ftp程序
2016/09/13 Python
用Python实现KNN分类算法
2017/12/22 Python
Python实现按照指定要求逆序输出一个数字的方法
2018/04/19 Python
python twilio模块实现发送手机短信功能
2019/08/02 Python
python操作微信自动发消息的实现(微信聊天机器人)
2020/07/14 Python
CSS3实现点击放大的动画实例代码
2017/02/27 HTML / CSS
KIEHL’S科颜氏官方旗舰店:源自美国的顶级护肤品牌
2018/06/07 全球购物
业务部经理岗位职责
2014/01/04 职场文书
文明礼仪小标兵事迹
2014/01/12 职场文书
幼儿教师国培感言
2014/02/19 职场文书
2014年法务工作总结
2014/12/11 职场文书
写景作文评语集锦
2014/12/25 职场文书
Python入门之使用pandas分析excel数据
2021/05/12 Python