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正常时间和unix时间戳相互转换的方法
Apr 23 Python
通过Python实现自动填写调查问卷
Sep 06 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
Feb 03 Python
python得到一个excel的全部sheet标签值方法
Dec 10 Python
详解pandas数据合并与重塑(pd.concat篇)
Jul 09 Python
pip指定python位置安装软件包的方法
Jul 12 Python
Python视频编辑库MoviePy的使用
Apr 01 Python
Python virtualenv虚拟环境实现过程解析
Apr 18 Python
python开发前景如何
Jun 11 Python
基于Tensorflow读取MNIST数据集时网络超时的解决方式
Jun 22 Python
解决Python中导入自己写的类,被划红线,但不影响执行的问题
Jul 13 Python
python openssl模块安装及用法
Dec 06 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 求质素(素数) 的实现代码
2011/04/12 PHP
PHP+MySQL之Insert Into数据插入用法分析
2015/09/27 PHP
PHP和MYSQL实现分页导航思路详解
2017/04/11 PHP
thinkphp5修改view到根目录实例方法
2019/07/02 PHP
PHP时间类完整代码实例
2021/02/26 PHP
js程序中美元符号$是什么
2008/06/05 Javascript
js停止输出代码
2008/07/20 Javascript
jQuery Select(单选) 模拟插件 V1.3.62 改进版
2010/07/17 Javascript
js取滚动条的尺寸的函数代码
2011/11/30 Javascript
js网页中的(运行代码)功能实现思路
2013/02/04 Javascript
JS操作Cookies的小例子
2013/10/15 Javascript
javascript对象的创建和访问
2016/03/08 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
JS刷新父窗口的几种方式小结(推荐)
2016/11/09 Javascript
基于JavaScript实现无缝滚动效果
2017/07/21 Javascript
微信小程序实现左右联动的实战记录
2018/07/05 Javascript
使用angularjs.foreach时return的问题解决
2018/09/30 Javascript
Vue Cli3 创建项目的方法步骤
2018/10/15 Javascript
layui使用button按钮 点击出现弹层 弹层中加载表单的实例
2019/09/04 Javascript
非常漂亮的js烟花效果
2020/03/10 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
2020/04/13 Javascript
JS eval代码快速解密实例解析
2020/04/23 Javascript
微信小程序报错: thirdScriptError的错误问题
2020/06/19 Javascript
python学习之编写查询ip程序
2016/02/27 Python
Python实现批量压缩图片
2018/01/25 Python
详解PyTorch批训练及优化器比较
2018/04/28 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
Numpy 理解ndarray对象的示例代码
2020/04/03 Python
巧用CSS3 border实现图片遮罩效果代码
2012/04/09 HTML / CSS
菲律宾优惠券网站:MetroDeal
2019/04/12 全球购物
eBay加拿大站:eBay.ca
2019/06/20 全球购物
如何用JQuery进行表单验证
2013/05/29 面试题
2014年自我评价
2014/01/04 职场文书
普通党员群众路线教育实践活动心得体会
2014/11/04 职场文书
2014年银行年终工作总结
2014/12/19 职场文书
奖学金感谢信
2015/01/21 职场文书