关于Django模板渲染一个很重要的用途
一般情况下我们在模板利用django的for标签循环生成html代码时,可以同时生成形如:
"{% url 'dormitory:hygiene_detail' pk={{ id }} %}"
的url地址,这样很容易就把参数动态的匹配到每一个url中了。
但是,如果html的代码需要js来动态的生成,再用django的for标签就不合适了。
因为for标签运用在js里,会生成大量的js代码。
因此,这就需要使用json.dumps()来把后台的dict数组转化成json数组,再在模板中使用safe过滤器来获取json数据,获取了json数据,剩下的事交给js就可以了。
但是,这种情况下,我遇到了一个头疼的问题,那就是url不能使用以下方式来传递参数了。
"{% url 'dormitory:hygiene_detail' pk={{ id }} %}"
这个时候我就想到了使用后台来传递url地址:
"href": "{% url 'dormitory:hygiene_detail' pk=" + str(id) + " %}"
这样在前台遍历json数组的时候就可以拿到href属性。
for(var i in {{ dormitory_list|safe }}){
var item = dormitory_list[i];
str += '<div class="dormitory-number color-0082fe" is_checked="1" href="' + item.href + '">' + item.number + '</div>';
}
在click事件里面拿到href属性实现跳转:
$('.dormitory-number').on('click', function(e){
if($(e.target).attr('is_checked') == '1'){
window.location.href = $(e.target).attr('href');
}
}
...
什么?你以为这样就万事大吉了?NO NO,接下来我又发现在模板中接收到的这个url参数是个静态字符串,并未解析:
alert(url);
显示:{% url 'dormitory:hygiene_detail' pk=10 %}
想要得到的渲染结果应该是:/dormitory/hydiene_detail/10/
解决方法就是在后台传递href参数时,使用Django的Template处理一下即可:
from django.template import Context, Template
ctx['dormitory_list'].append({
"number": 100,
"is_checked": 1,
"id": id,
"href": Template("{% url 'dormitory:hygiene_detail' pk=" + str(id) + " %}").render(Context())
})
最后一步,在click事件里面实现跳转:
$('.dormitory-number').on('click', function(e){
if($(e.target).attr('is_checked') == '1'){
window.location.href = $(e.target).attr('href');
}
}
到此就万事大吉啦!
附:
E:\qiye (gengleiming)
λ manage.py shell
Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec 5 2015, 20:40:30) [MSC v.1500 64 bit (AMD64)]
Type "copyright", "credits" or "license" for more information.
IPython 5.0.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: from django.template import Context, Template
In [2]: t = Template('My name is {{ name }}.')
In [3]: c = Context({'name': 'nowamagic'})
In [4]: t.render(c)
Out[4]: u'My name is nowamagic.'
In [5]:
关于Django模板渲染一个很重要的用途的更多相关文章
- Django—模板渲染
参考文档: http://www.cnblogs.com/fnng/p/4373108.html https://code.ziqiangxuetang.com/django/django-intro ...
- Django模板渲染
一 . 语法 # 关于模板渲染只需要记住两种语法就可以: 1.{{ }} # 里面写变量 2.{% %} # 里面写与逻辑相关的,比如for循环 二 . 变量名 在django的模板语言中按照语法: ...
- 19 01 17 Django 模板 返回一个页面
模板 问题 如何向请求者返回一个漂亮的页面呢? 肯定需要用到html.css,如果想要更炫的效果还要加入js,问题来了,这么一堆字段串全都写到视图中,作为HttpResponse()的参数吗?这样定义 ...
- Django模板渲染——(二)
模板标签 模板是由HTML代码和一些逻辑控制代码组成的,逻辑控制代码除了前面介绍的变量和过滤器,还要一个非常重要的模板标签.模板标签的语法规则是{% tag %},模板标签在渲染的过程中能提供任意的逻 ...
- Django 模板渲染
模板语言 {{ 变量 }} {% 逻辑 %} {{ 变量 }} {{ 变量 }}中的点号 用于取出字典/列表等类型数据的值 {{ list.2 }} 获取列表list中索引为2的值 {{ dict.n ...
- Django模板渲染之自定义inclusion_tag详细使用
inclusion_tag在使用的时候可以帮我们减少很多前端和后端重复的代码 逻辑图: inclusion_tag的作用是主页面以一定的语法给一个参数,调用某个函数,这个函数可以通过主页面给的参数做一 ...
- python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
python3.5 manage.py runserver python Django教程 之模板渲染.循环.条件判断.常用的标签.过滤器 一.Django模板渲染模板 1. 创建一个 zqxt_tm ...
- 初学Django基础01 建立工程,目录结构,常用配置,上下文管理,模板渲染
django是python的web重量级框架,发展已经有10年多了,对应下面版本 Django 版本 Python 版本 1.8 2.7, 3.2 , 3.3, 3.4, 3.5 1.9, 1.10 ...
- django模板系统基础
模板系统基础Django模板是一个string文本,它用来分离一个文档的展现和数据 模板定义了placeholder和表示多种逻辑的tags来规定文档如何展现 通常模板用来输出HTML,但是Djang ...
随机推荐
- Android性能优化学习
工作以来,越来越觉得性能优化的重要性,从技术角度,它甚至成了决定一个app成败的最关键因素.因此,特地花时间去学习专研性能优化的方法. 学习性能优化最便捷的方式便是研读别人有关性能优化的博客,然而网上 ...
- 【Android纳米学位】project 0 - 问题汇总
1.页面布局 参考:http://www.xuebuyuan.com/1100763.html 从不知道如何下手到开始布局出想要的样子,使用线性布局及属性 margin,padding 2.添加点击事 ...
- cf B. Fence
http://codeforces.com/contest/363/problem/B #include <cstdio> #include <cstring> #includ ...
- Android Studio 设置LogCat 颜色
1. File -> Settings ->Search LogCat 2. Save a schema first, for instance: MyLogCatStyle 3. cho ...
- 【Xamarin 开发 IOS --IOS ViewController生命周期】
ViewController ViewController是IOS开发中MVC模式中的C,ViewController是view的controller,ViewController的职责主要包括管理内 ...
- SSH自动部署(转)
我的是windows环境,目前开发的过程中,有些项目需要一下子部署到很多的linux服务器上.写了个脚本能够自动上传文件和执行部署任务.完成这个任务需要的条件包括SSH配置和一个执行脚本. 准备 1. ...
- 在docker以FPM-PHP运行php,慢日志导致的BUG分析
问题描述: 最近将IOS书城容器化,切换流量后.正常的业务测试了一般,都没发现问题.线上的错误监控系统也没有报警,以为迁移工作又告一段落了,暗暗的松了一口气.紧接着,报警邮件来了,查看发现是一个苹果支 ...
- 虚拟机最佳实践:单个 VM、临时存储和已上传磁盘
大家好! 我是 Drew McDaniel,来自 Microsoft Azure虚拟机功能研发团队,我从团队成立之初就已加入. 在本博客文章中,我将分享一些最佳实践指南,帮助您充分利用您的Azure虚 ...
- Android ExpandableListActivity的简单介绍及小例子
Android中常常要用到ListView,但也经常要用到ExpandableListView,ListView是显示列表,而ExpandableListView显示的是分类的列表: 下面用一个例子来 ...
- win10 iis 创建新站点注意事项
新建站点时:注意文件夹权限增加everyone. 快速打开IIS:win+r:inetmgr