Django_模板中的URL参数化(四)
去除模板中的硬编码 URL
在案例中的 test1/templates/booktest/index.html 文件里编写的链接都硬编码的链接,比如:
<a href="/booktest/search/{{book.id}}">查看英雄</a>
硬编码和强耦合的链接,对于一个包含很多应用的项目来说,修改起来是十分困难的。然而,因为在 booktest/urls.py 中通过 name 参数为 URL 定义了名字,我们可以在 test1/templates/booktest/index.html 文件中使用 {% url %}
标签替换硬编码部分:
<a href="{% url 'search' book.id %}">查看英雄</a>
因为使用了 <int:bid> 所以在使用 {% url 视图名字 %}标签替换时需要增加 book.id 参数
这个标签的工作方式是在 booktest/urls 模块的 URL 定义中寻具有指定名字的条目。我们可以查看一下 booktest/urls 文件中,name='search' 的 URL 是在如下语句中定义的:
...
# ex: /booktest/search/1
path('search/<int:bid>', views.hero_info, name='search')
...
如果我们想改变投票详情视图的 URL,比如想改成 booktest/searchHeroInfo/1,我们不用在模板里修改任何东西(包括其它模板),只要在 booktest/urls.py 里稍微修改一下就行:
# ex: /booktest/search/1
path('searchHeroInfo/<int:bid>', views.hero_info, name='search')
为 URL 名称添加命名空间
在一个真实的 Django 项目中,可能会有五个,十个,二十个,甚至更多应用。Django 如何分辨重名的 URL 呢?举个例子,booktest
应用有 search 视图,可能另一个应用也有同名的视图。Django 如何知道 {% url %}
标签到底对应哪一个应用的 URL 呢?
答案是:在根 URLconf 中添加命名空间。在 booktest/urls.py 文件中稍作修改,加上 app_name
设置命名空间:
from django.urls import path from booktest import views app_name = 'booktest'
urlpatterns = [
# ex: /booktest/ # 调用index视图函数
path('', views.index, name='index'), # ex: /booktest/create # 调用create视图函数
path('create', views.create), # ex: /booktest/delete/1
# re_path('delete/(\d+)', views.delete), # 在path中使用正则时需要导入re_path方法
path('delete/<int:bid>', views.delete, name='delete'), # bid为视图函数的的形参名 # ex: /booktest/search/1
path('searchHeroInfo/<int:bid>', views.hero_info, name='search')
]
现在,编辑 test1/templates/booktest/index.html 文件,从:
<a href="{% url 'search' book.id %}">查看英雄</a>
修改为指向具有命名空间的详细视图:
<a href="{% url 'booktest:search' book.id %}">查看英雄</a>
在视图函数中重定向时使用具有命名空间的视图,编辑 test1/booktest/views.py 文件,从:
def create(request):
book = BookInfo(btitle="流星蝴蝶剑", bpub_date=datetime.date(1995, 12, 30), bread=2, bcomment=1)
book.save()
return redirect("/booktest/")
修改为:
def create(request):
book = BookInfo(btitle="流星蝴蝶剑", bpub_date=datetime.date(1995, 12, 30), bread=2, bcomment=1)
book.save()
return redirect(reverse("booktest:index"))
若重定向的界面需要传个book.id参数,代码如下:
def create(request):
...
return redirect(reverse('booktest:index', args=(book.id,)))
Django_模板中的URL参数化(四)的更多相关文章
- symfony在模板中生成url
{{ path('homepage') }},这里的homepage是route配置文件的内容,或者叫别名.
- thinkjphp 模板中获取url中的action
<if condition="ACTION_NAME eq 'add'">新增<else/>编辑</if>
- 测试开发之Django——No6.Django模板中的标签语言
模板中的标签语言 1.if/else {% if %} 标签检查(evaluate)一个变量,如果这个变量为真(即:变量存在,非空,不是布尔值假),系统会显示在{% if %} 和 {% endi ...
- ThinkPHP中U方法与url的四种访问模式
ThinkPHP中U方法的用处主要是完成对url地址的组装,在模板中使用U方法而不是固定写死URL地址的好处在于,一旦你的环境变化或者参数设置改变,你不需要更改模板中的任何代码.在模板中的调用格式需 ...
- django url路径与模板中样式相对路径的问题
static目录下有css和js及image等文件夹,里面放置网站的一些静态文件,static位于网站根目录下,django中配置静态文件这个就细说,网上都有,昨天在添加新内容时发现一个问题,我的ur ...
- ejs模板中的四种表达式输出形式
在ejs模板中,通常会用下面四种方式在HTML中输出服务端的变量或表达式的值: 1. 直接在<%%>中写表达式或变量.这种情况通常只是用来进行表达式计算或给变量赋值,不会有任何输出,被称作 ...
- django 模板中url的处理
在模板中直接添加‘/home’这样的链接是十分不推荐的,因为这是一个相对的链接,在不同网页中打开可能会返回不一样的结果. 所以推荐的是 <a href="{{ object.get_a ...
- 十四、 React路由(react-router4.x): 动态路由、get传值、React中使用url模块
概述 新闻列表 -跳转-> 详情页 时,想把列表对应的id传到详情页里,可用到三种传值方法: 1.动态路由传值 2.get传值 3.localstorage传值 一.动态路由传值 [App.js ...
- 记录一次bug解决过程:velocity中获取url中的参数
一.总结 在Webx的Velocity中获取url中参数:$rundata.getRequest().getParameter('userId') 在Webx项目中,防止CSRF攻击(Cross-si ...
随机推荐
- 【Linux】【Services】【Disks】zfs
1. 简介: 据说zfs有去除重复数据的功能,无良人士继续要求吧samba共享盘使用的centos7上自带的xfs改成zfs,并且开启去重功能.samba配置见 http://www.cnblogs. ...
- Linux 性能优化笔记:应用监控
指标监控 跟系统监控一样,在构建应用程序的监控系统之前,首先也需要确定,到底需要监控哪些指标.特别是要清楚,有哪些指标可以用来快速确认应用程序的性能问题. 对系统资源的监控,USE 法简单有效,却不代 ...
- 【C/C++】vector 动态二维数组
声明 vector<vector<int> vec; //赋值思路可以从这个很基础的操作里看出来 vector<int> a; a.push_back(1); a.pus ...
- bootstrapTable频繁向后台接口发请求
当bootstrapTable出现这样的问题,是因为查询到的数据行数为空,而后台返回的总行数又不为0时,就会疯狂地往接口发请求
- LuoguB2030 计算线段长度 题解
Content 已知线段的两个端点的坐标 \(A(X_a,Y_a),B(X_b,Y_b)\) ,求线段 \(AB\) 的长度. 数据范围:\(|X_a|,|Y_a|,|X_b|,|Y_b|\leqsl ...
- 除了背八股文,Java面试更该这样准备
我可以这样说,哪怕你背了再多java八股文的答案,过面试也能靠运气,因为很多java面试的答案只限于技术理论说辞.但用我本文给出的方法去准备面试,能在不提升技术的前提下,大大提升你java面试的通过率 ...
- ubuntu下载源码clang + llvm+lldb 编译+安装
[本文可能涉及到Ubuntu安装以下工具:] A.g++ B.gcc C.make D.cmake E.clang(10.0.1)(必须) F.llvm(10.0.1)(必须) G.lldb(10.0 ...
- 【LeetCode】1631. 最小体力消耗路径 Path With Minimum Effort
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 解题思路 并查集 代码 刷题心得 欢迎加入组织 日期 题目地址:https ...
- 【LeetCode】266. Palindrome Permutation 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典 日期 题目地址:https://leetcode ...
- 【LeetCode】939. Minimum Area Rectangle 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 确定对角线,找另外两点(4sum) 字典保存出现的x ...