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服务器拒绝服务攻击代码
Jan 16 Python
Python常见工厂函数用法示例
Mar 21 Python
python2与python3共存问题的解决方法
Sep 18 Python
Django中的ajax请求
Oct 19 Python
django 通过URL访问上传的文件方法
Jul 28 Python
详解Django将秒转换为xx天xx时xx分
Sep 27 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
Oct 24 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
Jan 04 Python
Django单元测试中Fixtures的使用方法
Feb 26 Python
Python IDLE或shell中切换路径的操作
Mar 09 Python
python实现吃苹果小游戏
Mar 21 Python
Python源码解析之List
May 21 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实现HTML生成PDF文件的方法
2014/11/07 PHP
Smarty foreach控制循环次数的一些方法
2015/07/01 PHP
基于PHP后台的Android新闻浏览客户端
2016/05/23 PHP
php双层循环(九九乘法表)
2017/10/23 PHP
PHP CURL中传递cookie的方法步骤
2019/05/09 PHP
利用javascript查看html源文件
2006/11/08 Javascript
javascript下阻止表单重复提交、防刷新、防后退
2007/08/17 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
jQuery图片切换插件jquery.cycle.js使用示例
2014/06/16 Javascript
JavaScript中的变量作用域介绍
2014/12/31 Javascript
js实现遍历含有input的table实例
2015/12/07 Javascript
深入理解Javascript中的自执行匿名函数
2016/06/03 Javascript
Jquery EasyUI $.Parser
2017/06/02 jQuery
关于javascript作用域的常见面试题分享
2017/06/18 Javascript
vue 移动端注入骨架屏的配置方法
2019/06/25 Javascript
VSCode插件安装完成后的配置(常用配置)
2020/08/24 Javascript
[01:32]寻找你心中的那团火 DOTA2 TI9火焰传递活动今日开启
2019/05/16 DOTA
从Python程序中访问Java类的简单示例
2015/04/20 Python
Windows系统下多版本pip的共存问题详解
2017/10/10 Python
Python不使用int()函数把字符串转换为数字的方法
2018/07/09 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
2020/06/18 Python
python如何获得list或numpy数组中最大元素对应的索引
2020/11/16 Python
python 窃取摄像头照片的实现示例
2021/01/08 Python
css3类选择器之结合元素选择器和多类选择器用法
2017/03/09 HTML / CSS
图片上传插件ImgUploadJS:用HTML5 File API 实现截图粘贴上传、拖拽上传
2016/01/20 HTML / CSS
静心口服夜广告词
2014/03/20 职场文书
幼儿园中班开学寄语
2014/04/03 职场文书
初中升旗仪式演讲稿
2014/05/08 职场文书
学校端午节活动方案
2014/08/23 职场文书
法人代表身份证明书及授权委托书
2014/09/16 职场文书
2015年党风廉政建设目标责任书
2015/05/08 职场文书
新生开学寄语大全
2015/05/28 职场文书
2019广播稿怎么写
2019/04/17 职场文书
2019个人工作态度自我评价
2019/04/24 职场文书
laravel ajax curd 搜索登录判断功能的实现
2021/04/17 PHP
关于CentOS 8 搭建MongoDB4.4分片集群的问题
2021/10/24 MongoDB