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在控制台输出进度条的方法
Jun 20 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
Jan 21 Python
基于python OpenCV实现动态人脸检测
May 25 Python
Python闭包执行时值的传递方式实例分析
Jun 04 Python
Python倒排索引之查找包含某主题或单词的文件
Nov 13 Python
Django中密码的加密、验密、解密操作
Dec 19 Python
Matplotlib scatter绘制散点图的方法实现
Jan 02 Python
Python 3.8 新功能大揭秘【新手必学】
Feb 05 Python
Python reversed函数及使用方法解析
Mar 17 Python
jupyter notebook 添加kernel permission denied的操作
Apr 21 Python
完美解决python针对hdfs上传和下载的问题
Jun 05 Python
使用Pytorch实现two-head(多输出)模型的操作
May 28 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实现计数器方法小结
2015/01/05 PHP
php检查字符串中是否有外链的方法
2015/07/29 PHP
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
动态改变textbox的宽高的js
2006/10/26 Javascript
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
javascript window对象属性整理
2009/10/24 Javascript
jQuery Validation实例代码 让验证变得如此容易
2010/10/18 Javascript
js禁止小键盘输入数字功能代码
2011/08/01 Javascript
ajax上传时参数提交不更新等相关问题
2012/12/11 Javascript
js 获取计算后的样式写法及注意事项
2013/02/25 Javascript
验证码按回车不变解决方法
2013/03/29 Javascript
js中一维数组和二位数组中的几个问题示例说明
2014/07/17 Javascript
jquery单选框radio绑定click事件实现方法
2015/01/14 Javascript
JS获取时间的方法
2015/01/21 Javascript
jQuery 选择器(61种)整理总结
2016/09/26 Javascript
vue .js绑定checkbox并获取、改变选中状态的实例
2018/08/24 Javascript
JavaScript代码异常监控实现过程详解
2020/02/17 Javascript
微信小程序自定义支持图片的弹窗
2020/12/21 Javascript
Cython 三分钟入门教程
2009/09/17 Python
python对html代码进行escape编码的方法
2015/05/04 Python
windows下python连接oracle数据库
2017/06/07 Python
1分钟快速生成用于网页内容提取的xslt
2018/02/23 Python
python3爬虫获取html内容及各属性值的方法
2018/12/17 Python
Flask框架重定向,错误显示,Responses响应及Sessions会话操作示例
2019/08/01 Python
使用python获取邮箱邮件的设置方法
2019/09/20 Python
django formset实现数据表的批量操作的示例代码
2019/12/06 Python
python中sympy库求常微分方程的用法
2020/04/28 Python
Python2.6版本pip安装步骤解析
2020/08/17 Python
利用CSS3的线性渐变linear-gradient制作边框的示例
2016/06/02 HTML / CSS
澳大利亚在线百货商店:Real Smart
2017/08/13 全球购物
意大利简约的休闲品牌:Aspesi
2018/02/08 全球购物
STP的判定过程
2012/10/01 面试题
怎样写留学自荐信
2013/11/11 职场文书
实习评语大全
2014/04/26 职场文书
婚庆公司开业主持词
2015/06/30 职场文书
2021年pycharm的最新安装教程及基本使用图文详解
2021/04/03 Python