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中的__SLOTS__属性使用示例
Feb 18 Python
linux下python抓屏实现方法
May 22 Python
用Python写冒泡排序代码
Apr 12 Python
Python调用系统底层API播放wav文件的方法
Aug 11 Python
itchat接口使用示例
Oct 23 Python
Python数据处理numpy.median的实例讲解
Apr 02 Python
python smtplib发送带附件邮件小程序
May 22 Python
python解析json串与正则匹配对比方法
Dec 20 Python
从0开始的Python学习014面向对象编程(推荐)
Apr 02 Python
Django在pycharm下修改默认启动端口的方法
Jul 26 Python
python求质数列表的例子
Nov 24 Python
Python如何使用OS模块调用cmd
Feb 27 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简单静态页生成过程
2008/03/27 PHP
php判断字符以及字符串的包含方法属性
2008/08/30 PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
2013/08/16 PHP
php自动识别文字编码并转换为目标编码的方法
2015/08/08 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
2016/12/28 PHP
HTML中事件触发列表与解说
2007/07/09 Javascript
js 调整select 位置的函数
2008/02/21 Javascript
JavaScript识别网页关键字并进行描红的方法
2015/11/09 Javascript
jQuery 3.0中存在问题及解决办法
2016/07/15 Javascript
js实现刷新页面后回到记录时滚动条的位置【两种方案可选】
2016/12/12 Javascript
angular分页指令操作
2017/01/09 Javascript
微信小程序 MD5加密登录密码详解及实例代码
2017/01/12 Javascript
利用JavaScript在网页实现八数码启发式A*算法动画效果
2017/04/16 Javascript
js实现复制功能(多种方法集合)
2018/01/06 Javascript
vue+axios 前端实现的常用拦截的代码示例
2018/08/23 Javascript
three.js利用卷积法如何实现物体描边效果
2019/11/27 Javascript
详解JavaScript中分解数字的三种方法
2021/01/05 Javascript
[01:07:02]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第三场 2月26日
2021/03/11 DOTA
python制作最美应用的爬虫
2015/10/28 Python
Python自动化测试Eclipse+Pydev 搭建开发环境
2016/08/15 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
2017/11/16 Python
matplotlib subplots 设置总图的标题方法
2018/05/25 Python
Python计算一个点到所有点的欧式距离实现方法
2019/07/04 Python
python实现名片管理器的示例代码
2019/12/17 Python
python 实现list或string按指定分段
2019/12/25 Python
详解pandas.DataFrame.plot() 画图函数
2020/06/14 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
用HTML5制作烟火效果的教程
2015/05/12 HTML / CSS
Kenneth Cole官网:纽约时尚优雅品牌
2016/11/14 全球购物
为什么要用EJB
2014/04/17 面试题
餐饮管理自我介绍信
2014/01/15 职场文书
《十六年前的回忆》教学反思
2014/02/14 职场文书
挂牌仪式策划方案
2014/05/18 职场文书
竞聘演讲稿开场白
2014/08/25 职场文书
获奖感言怎么写
2015/07/31 职场文书
Pyhton爬虫知识之正则表达式详解
2022/04/01 Python