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如何通过protobuf实现rpc
Mar 06 Python
Fabric 应用案例
Aug 28 Python
Python实现随机选择元素功能
Sep 14 Python
Sanic框架异常处理与中间件操作实例分析
Jul 16 Python
对python的unittest架构公共参数token提取方法详解
Dec 17 Python
Python 实现中值滤波、均值滤波的方法
Jan 09 Python
python使用thrift教程的方法示例
Mar 21 Python
对django 模型 unique together的示例讲解
Aug 06 Python
python生成requirements.txt的两种方法
Sep 18 Python
tensorboard显示空白的解决
Feb 15 Python
关于探究python中sys.argv时遇到的问题详解
Feb 23 Python
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 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
用header 发送cookie的php代码
2007/03/16 PHP
基于curl数据采集之正则处理函数get_matches的使用
2013/04/28 PHP
PHP+Ajax无刷新带进度条图片上传示例
2017/02/08 PHP
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
JavaScript中的Document文档对象
2008/01/16 Javascript
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
2009/05/21 Javascript
input+select(multiple) 实现下拉框输入值
2009/05/21 Javascript
11款基于Javascript的文件管理器
2009/10/25 Javascript
jQuery 绑定事件到动态创建的元素上的方法实例
2013/08/18 Javascript
javascript 判断字符串是否包含某字符串及indexOf使用示例
2013/10/18 Javascript
jquery 字符串切割函数substring的用法说明
2014/02/11 Javascript
Javascript遍历table中的元素示例代码
2014/07/08 Javascript
Javascript访问器属性实例分析
2014/12/30 Javascript
jQuery中next()方法用法实例
2015/01/07 Javascript
基于Node.js的WebSocket通信实现
2017/03/11 Javascript
JS实现换肤功能的方法实例详解
2019/01/30 Javascript
基于vue通用表单解决方案的思考与分析
2019/03/16 Javascript
js实现类似iphone的网页滑屏解锁功能示例【附源码下载】
2019/06/10 Javascript
jquery实现垂直无限轮播的方法分析
2019/07/16 jQuery
小程序调用微信支付的方法
2019/09/26 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
2020/10/29 Javascript
Python中用max()方法求最大值的介绍
2015/05/15 Python
利用Python操作消息队列RabbitMQ的方法教程
2017/07/19 Python
python基础while循环及if判断的实例讲解
2017/08/25 Python
pandas的object对象转时间对象的方法
2018/04/11 Python
Python实现查找最小的k个数示例【两种解法】
2019/01/08 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
2019/07/15 Python
Python大数据之使用lxml库解析html网页文件示例
2019/11/16 Python
Python3标准库之functools管理函数的工具详解
2020/02/27 Python
Net-A-Porter美国官网:全球时尚奢侈品名站
2017/02/11 全球购物
德国珠宝和配件商店:Styleserver
2021/02/23 全球购物
农村党支部先进事迹
2014/01/14 职场文书
体检通知范文
2015/04/21 职场文书
《观察物体》教学反思
2016/02/17 职场文书
解决Swagger2返回map复杂结构不能解析的问题
2021/07/02 Java/Android
Python实现文字pdf转换图片pdf效果
2022/04/03 Python