render的几个应用
1.render可以通过模版语法来渲染字符串,例如变量,标签,for循环,这里就不赘述,我就举个自己印象很深刻灵活应用,看看render到底做了什么,关心什么
注意! 在rander眼里,没有html和js,只有普通的字符串.当碰到特定的语法,例如load,extends,include,{{ }}, { % %}他就会去执行对应的操作,把他们翻译成浏览器能识别的字符串
views视图
def index(request):
if request.is_ajax():
return HttpResponse('ok')
else:
fruit='sweet'
return render(request,'index.html',{'fruit':fruit})
html模版
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
</head>
<body>
<div>
首页 {{ fruit }}
</div>
<button id="btn">发送ajax</button>
<span fruit="{{ fruit }}"></span>
</body>
{#方式一#}
<script>
$(function () {
$('btn').click(function () {
$.ajax({
url:'',
type:'get', #重点一
data: '{{ fruit }}', #render渲染到这的时候,可以把{{fruit}}渲染成sweet,
但是此时,如果不加 '' ,把{{}}括起来,在浏览器翻译js的过程中,他会把sweet当成变量,就会报错,因为sweet未被定义
success:function (res) {
console.log(res)
}
})
})
})
</script>
{#方式二#}
<script src="index.js"></script> #重点二 render不认得什么引入不引入,至把她当成字符串,这个时候js文件中的{{ fruit }}根本不会被渲染,只是原样输出'{{ fruit }}'
js文件
$(function () {
$('btn').click(function () {
$.ajax({
url:'',
type:'get',
data: '{{ fruit }}', #改进方法
data : $('span').attr('fruit') 灵活获取变量,因为render碰到span标签会渲染,此时可以利用dom操作,获得变量
success:function (res) {
console.log(res)
}
})
})
});
2.利用render遇到自定义过滤器执行特定的方法,来达到优化代码,提炼相同的函数功能的目的
目的,动态菜单且当前路径的菜单加个 active 标签
view的login视图
def login_promission(request):
# 查看当前登录人对应的 url 权限,存在session表里,统一提取出来,然后在中间键统一交验 ********
promissions = Role.objects.filter(userinfos=request.user).values('promissions__url', 'promissions__title',
'promissions__is_menu').distinct()
promission_list = []
promission_menu_list = []
for i in promissions:
promission_list.append(i['promissions__url'])
if i['promissions__is_menu']:
promission_menu_list.append({
'url': i['promissions__url'],
'title': i['promissions__title']
})
# 将当前登录人的url注入到session表里
request.session['promission_list'] = promission_list
# 将菜单权限注入的session
中间键校验权限
class PermissionMiddleWare(MiddlewareMixin):
def process_request(self,request):
# 1.白名单
path=request.path
print(path)
white_list=['/login/','/admin/*','/reg/','/get_valid_img/','/index/']
for i in white_list:
ret=re.search(i,path)
if ret:
return None
# 2 校验身份
if not request.user.id:
return redirect('/login/')
# 3.校验权限
permission_list=request.session.get('promission_list')
print(permission_list) for i in permission_list:
new_promission='^%s$' % i
res=re.search(new_promission,path)
if res:
return None
return HttpResponse('无权限')
templatetags下的自定义过滤器
import re
from django.template import Library
register=Library()
@register.inclusion_tag('menu.html')
def menu_list_style(request):
promission_menu_list = request.session.get('promission_menu_list') #避免了视图函数重复写相似功能的函数,都留给render,碰到load再统一加载
for i in promission_menu_list:
tmp='^{}$'.format(i['url'])
if re.search(tmp, request.path):
i['class'] = 'active'
return {'promission_menu_list': promission_menu_list}
过滤器渲染的menu网页
{% for menu in promission_menu_list %}
<li class="{{ menu.class }}">
<a href="{{ menu.url }}"><span>{{ menu.title }}</span></a>
</li>
{% endfor %}
base母版
{% load active %}
{% menu_list_style request %}
render的几个应用的更多相关文章
- React.render和reactDom.render的区别
刚开始学习react.js.发现网上的资料,有些是写着react.render,有些写着reactDom.render.觉得很奇怪就查阅了一下资料.解释如下: 这个是react最新版api,也就是0. ...
- XF custom render 各平台实现类
目前的XF还是非常简陋的,所以存在大量的自定义工作.一般情况下我们只是要需要派生原生的XF控件,然后在各平台下修改其呈现方法. 所以了解每个XF控件在不同平台上呈现使用的控件类是有所必须要的.以下别人 ...
- 塞翁失马,焉知非福:由 Styles.Render 所引发 runAllManagedModulesForAllRequests="true" 的思考
最近在使用 MVC 开发的时候,遇到一个对我来说"奇怪的问题",就是使用 BundleTable 进行 CSS.JS 文件绑定,然后使用 Styles.Render.Scripts ...
- ReactJS分析之入口函数render
前言 在使用React进行构建应用时,我们总会有一个步骤将组建或者虚拟DOM元素渲染到真实的DOM上,将任务交给浏览器,进而进行layout和paint等步骤,这个函数就是React.render() ...
- Cesium原理篇:6 Render模块(3: Shader)
在介绍Renderer的第一篇,我就提到WebGL1.0对应的是OpenGL ES2.0,也就是可编程渲染管线.之所以单独强调这一点,算是为本篇埋下一个伏笔.通过前两篇,我们介绍了VBO和Textur ...
- Cesium原理篇:6 Render模块(4: FBO)
Cesium不仅仅提供了FBO,也就是Framebuffer类,而且整个渲染过程都是在FBO中进行的.FBO,中文就是帧缓冲区,通常都属于高级用法,但其实,如果你了解了它的基本原理后,用起来还是很简单 ...
- Cesium原理篇:6 Render模块(5: VAO&RenderState&Command)
VAO VAO(Vertext Array Object),中文是顶点数组对象.之前在<Buffer>一文中,我们介绍了Cesium如何创建VBO的过程,而VAO可以简单的认为是基于VBO ...
- render :template 和 render :parital
1 .这两个都可以在controller和view中使用,而且好像可以替换,只是用:template,rails不会自动加下划线,用:partial,rails会自动添加下划线.而且规范的做法,:te ...
- AngularJs中,如何在render完成之后,执行Js脚本
AngularJs是Google开源的前端JS框架.使用AngularJs, 我们能够容易地.健壮的开发出类似于Gmail一样的单页Web应用.AngularJs这个新兴的MVC前端框架,具有以下特点 ...
- 利用Render Texture实现游戏的小雷达效果(摄影机分屏)
最近游戏蛮牛在举办一个活动,就是要做出这样的效果: 题目:实现游戏分屏效果 要求:1. 分屏,且分割线不规则(即非水平或垂直):2. 各屏可单独操作(移动.缩放),操作指该 ...
随机推荐
- MySQL索引覆盖
什么是“索引覆盖”? 简单来的说,就是让查询的字段(包括where子句中的字段),都是索引字段.索引覆盖的好处是什么?好处是极大的.极大的.极大的提高查询的效率!重要的说三遍! 特别说明: 1.whe ...
- oracle_存储过程_有参数_获取部门装置层级树
create or replace procedure P_UTIL_TREE(P_APPL_NAME in VARCHAR2, P_HIERARCHY_TYP in VARCHAR2, TREETY ...
- nginx mac 下启动 停止 重启,查看安装位置
Nginx的启动.停止与重启 启动 启动代码格式:nginx安装目录地址 -c nginx配置文件地址 例如: [root@LinuxServer sbin]# /usr/local/nginx/ ...
- 关于新塘 M0 M4添加库文件的说明
- 《C++ Primer Plus》12.6 复习各种(类和动态内存分配的)技术 笔记
12.6.1 重载<<运算符要重新定义<<运算符,以便将它和cout一起用来显示对象的内容,请定义下面的友元运算符函数:ostream & operator<&l ...
- INSERT INTO 语句
语法 INSERT INTO 表名称 VALUES (值1, 值2,....) 我们也可以指定所要插入数据的列: INSERT INTO table_name (列1, 列2,...) VALUES ...
- poj_1161 并查集
题目大意 一个学校里面有n个学生(标号从0到n-1)和m个社团(标号从0到m-1),每个学生属于0个或多个社团.近期有SARS传播,属于同一个社团的学生的SARS可以相互传染.给出m个社团中的学生标号 ...
- 解决报错:scandir() has been disabled for security reasons
服务器环境: LNMP 在服务器部署代码时候.遇到了这个问题. 蛋疼啊! 2 解决办法: 打开phpinfo.php , 搜索: scandir 找到disabled_function,确认此函数未 ...
- 使用boch仿真器在x86 PC平台上搭建Linux0.11系统环境(windows下)
当你有机会来到这页面时 十有八九是遇到这样一个问题 执行配置文件bochsrc_fd.bxrc时出现找不到 ips的情况! 版本原因吧 将boch版本换成2.4的问题就迎刃而解了~ 简单 ...
- struts2 中redirectAction如何传递参数!
在struts2中,初学者因为参数传递的问题往往会出现一些错误. 比如页面跳转的问题,在用户注册中,以一下代码作为案例: <struts> <constant name=" ...