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创建一个最简单http webserver服务器的方法
May 08 Python
关于Python元祖,列表,字典,集合的比较
Jan 06 Python
Python 3.6 性能测试框架Locust安装及使用方法(详解)
Oct 11 Python
matplotlib绘制动画代码示例
Jan 02 Python
python中实现字符串翻转的方法
Jul 11 Python
详解python:time模块用法
Mar 25 Python
python性能测量工具cProfile使用解析
Sep 26 Python
在vscode中配置python环境过程解析
Sep 28 Python
python对象销毁实例(垃圾回收)
Jan 16 Python
利用python控制Autocad:pyautocad方式
Jun 01 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
Feb 03 Python
python 进阶学习之python装饰器小结
Sep 04 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 程序员也要学会使用“异常”
2009/06/16 PHP
PHP命名空间(namespace)的动态访问及使用技巧
2014/08/18 PHP
php实现在新浪云中使用imagick生成缩略图并上传的方法
2016/09/26 PHP
PHP SESSION机制的理解与实例
2019/03/22 PHP
php的lavarel框架中join和orWhere的用法
2020/12/28 PHP
用JQuery 判断某个属性是否存在hasAttr的解决方法
2013/04/26 Javascript
javascript实现的淘宝旅行通用日历组件用法实例
2015/08/03 Javascript
js选择器全面解析
2016/06/27 Javascript
JS碰撞运动实现方法详解
2016/12/15 Javascript
jQuery中弹出iframe内嵌页面元素到父页面并全屏化的实例代码
2016/12/27 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
2017/07/05 Javascript
jQuery实现的简单日历组件定义与用法示例
2018/12/24 jQuery
NodeJS实现同步的方法
2019/03/02 NodeJs
在vue中动态添加class类进行显示隐藏实例
2019/11/09 Javascript
vant-ui AddressEdit地址编辑和van-area的用法说明
2020/11/03 Javascript
[40:05]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第一局
2016/02/25 DOTA
[03:17]史诗级大片应援2018DOTA2国际邀请赛 致敬每一位坚守遗迹的勇士
2018/07/20 DOTA
使用Python判断IP地址合法性的方法实例
2014/03/13 Python
python自然语言编码转换模块codecs介绍
2015/04/08 Python
一个基于flask的web应用诞生 记录用户账户登录状态(6)
2017/04/11 Python
学习Python3 Dlib19.7进行人脸面部识别
2018/01/24 Python
python+splinter实现12306网站刷票并自动购票流程
2018/09/25 Python
详解如何用django实现redirect的几种方法总结
2018/11/22 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
2019/01/05 Python
python 应用之Pycharm 新建模板默认添加编码格式-作者-时间等信息【推荐】
2019/06/17 Python
django的403/404/500错误自定义页面的配置方式
2020/05/21 Python
Python中SQLite如何使用
2020/05/27 Python
详细分析Python可变对象和不可变对象
2020/07/09 Python
沙龙级头发造型工具:FOXYBAE
2018/07/01 全球购物
向全球直邮输送天然健康产品:iHerb.com
2020/05/03 全球购物
畜牧兽医本科生的自我评价
2014/03/03 职场文书
宪法宣传周工作方案
2014/05/26 职场文书
启动仪式策划方案
2014/06/14 职场文书
上党课的心得体会
2014/09/02 职场文书
MySQL中存储时间的最佳实践指南
2021/07/01 MySQL
SQL Server数据库基本概念、组成、常用对象与约束
2022/03/20 SQL Server