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. 各屏可单独操作(移动.缩放),操作指该 ...
随机推荐
- Nginx的启动与停止,重启
1.先确定nginx所在的文件位置 如: 重启 1.验证nginx配置文件是否正确 方法一:进入nginx安装目录sbin下,输入命令./nginx -t 2.重启Nginx服务 方法一:进入ngin ...
- mysql5.7 编码统一utf-8
查看mysql数据库编码: show variables like 'character%'; mysql> show variables like 'character%'; +------- ...
- 分享jQuery封装好的一些常用操作
1. 禁止右键点击 $(document).ready(function(){ $(document).bind("contextmenu",function(e){ ...
- 完美解决jQuery符号$与其他javascript 库、框架冲突的问题
目前有大量的 javascript 开发框架,其中有一部分使用 $ 作为调用符号,这可能导致相互之间的冲突,而 jQuery 为解决这个问题,可以在 jQuery 导入时放弃 $ 使用权,届时 $ 则 ...
- OpenCV学习:实现简单的图像叠加
本实例使用简单的线性叠加方法来实现两幅图像的叠加,主要使用的知识如下: 1)线性融合 2)addWeighted函数 //! computes weighted sum of two arrays ( ...
- OpenCV学习:播放avi视频文件
#if 0 //播放avi视频文件(IplImage) #include <opencv2/opencv.hpp> using namespace std; #pragma comment ...
- downtown uptown
Downtown is a term primarily used in North America by English speakers to refer to a city's core (or ...
- Zookeeper异常org.apache.zookeeper.KeeperException$ConnectionLossException
在虚拟机上安装了CenOS Linux系统,然后配置好了 zookeeper的集群环境,在本地写了一个Zookeeper测试程序,如下: package com.xbq.zookeeper; impo ...
- mac 安装mysql 修改密码
我草!!! 上网查资料,安装mysql,一大推废话,简直就是他妈的瞎扯淡,真是能他妈的瞎编,草! 为了不让后面的同学看到那些狗屁不通的资料,我把自己安装mysql的步骤,以及修改mysql密码的方法梳 ...
- 嵌入式Linux下Qt的中文显示
一般情况下,嵌入式Qt界面需要中文显示,下面总结自己在项目中用到的可行的办法 1,下载一种中文简体字体,比如我用的是”方正准圆简体“,把字体文件放在ARM开发板系统的Qt字库中,即/usr/lib/f ...