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的几个应用的更多相关文章

  1. React.render和reactDom.render的区别

    刚开始学习react.js.发现网上的资料,有些是写着react.render,有些写着reactDom.render.觉得很奇怪就查阅了一下资料.解释如下: 这个是react最新版api,也就是0. ...

  2. XF custom render 各平台实现类

    目前的XF还是非常简陋的,所以存在大量的自定义工作.一般情况下我们只是要需要派生原生的XF控件,然后在各平台下修改其呈现方法. 所以了解每个XF控件在不同平台上呈现使用的控件类是有所必须要的.以下别人 ...

  3. 塞翁失马,焉知非福:由 Styles.Render 所引发 runAllManagedModulesForAllRequests="true" 的思考

    最近在使用 MVC 开发的时候,遇到一个对我来说"奇怪的问题",就是使用 BundleTable 进行 CSS.JS 文件绑定,然后使用 Styles.Render.Scripts ...

  4. ReactJS分析之入口函数render

    前言 在使用React进行构建应用时,我们总会有一个步骤将组建或者虚拟DOM元素渲染到真实的DOM上,将任务交给浏览器,进而进行layout和paint等步骤,这个函数就是React.render() ...

  5. Cesium原理篇:6 Render模块(3: Shader)

    在介绍Renderer的第一篇,我就提到WebGL1.0对应的是OpenGL ES2.0,也就是可编程渲染管线.之所以单独强调这一点,算是为本篇埋下一个伏笔.通过前两篇,我们介绍了VBO和Textur ...

  6. Cesium原理篇:6 Render模块(4: FBO)

    Cesium不仅仅提供了FBO,也就是Framebuffer类,而且整个渲染过程都是在FBO中进行的.FBO,中文就是帧缓冲区,通常都属于高级用法,但其实,如果你了解了它的基本原理后,用起来还是很简单 ...

  7. Cesium原理篇:6 Render模块(5: VAO&RenderState&Command)

    VAO VAO(Vertext Array Object),中文是顶点数组对象.之前在<Buffer>一文中,我们介绍了Cesium如何创建VBO的过程,而VAO可以简单的认为是基于VBO ...

  8. render :template 和 render :parital

    1 .这两个都可以在controller和view中使用,而且好像可以替换,只是用:template,rails不会自动加下划线,用:partial,rails会自动添加下划线.而且规范的做法,:te ...

  9. AngularJs中,如何在render完成之后,执行Js脚本

    AngularJs是Google开源的前端JS框架.使用AngularJs, 我们能够容易地.健壮的开发出类似于Gmail一样的单页Web应用.AngularJs这个新兴的MVC前端框架,具有以下特点 ...

  10. 利用Render Texture实现游戏的小雷达效果(摄影机分屏)

    最近游戏蛮牛在举办一个活动,就是要做出这样的效果: 题目:实现游戏分屏效果 要求:1.        分屏,且分割线不规则(即非水平或垂直):2.        各屏可单独操作(移动.缩放),操作指该 ...

随机推荐

  1. wd mycloud nas新玩法

    最近家里的小米路由器坏了,主要是硬盘读取不出,小米之家也无能为力,本想继续在小米之家买个小米路由器,后来了解到了nas,于是想折腾下.我的nas型号是wd mycloud,3TB内置硬盘.功能:可以组 ...

  2. eclipse项目配置tomcat后浏览器访问不到项目解决方案

    先把项目从tomcat溢出,并删除tomcat,然后再次导入 双击: 修改:

  3. LINUX 环境变量总结

    1.概述 Linux是一个多用户的操作系统.多用户意味着每个用户登录系统后,都有自己专用的运行环境.而这个环境是由一组变量所定义,这组变量被称为环境变量.用户可以对自己的环境变量进行修改以达到对环境的 ...

  4. asp.net截屏功能实现截取web页面

    using System.Drawing;  //打开该页面 System.Diagnostics.Process.Start("IEXPLORE.EXE", "http ...

  5. C++与Java混合编程

    现在的程序员,不再像以前一样,掌握一种编程语言就可以混得有模有样了,现实的情况是,真实的项目中,通常是涉及多种编程语言,举几个简单的例子,一个软件为了快速开发,可能是使用Delphi或VB作为界面开发 ...

  6. EasyTouch5初步用法和其中的一个Bug

    (一)配置部分:一.将预设体拖入场景中,我用的是下图这个预设体,因为既有摇杆又有按钮嘛,两个正好都能学习到 二.改变摇杆和按钮的外观,如下图所示,可以看出这个插件是用UGUI写的,改图片只需要改Ima ...

  7. 把Excel中的数据转换成Sql语句

    假如excel表格中有A.B.C三列数据,希望导入到数据库users表中,相应的字段各自是name,sex,age ,在你的excel表格中添加一列.利用excel的公式自己主动生成sql语句,方法例 ...

  8. Extjs6.2.0搭建项目框架

    1.安装 首先你总要去官网下载ext-6.2.0-gpl.zip和安装Sencha CMD工具来管理ExtJs项目,ext-6.2.0-gpl.zip下载完成解压先放在一边,一会用到. Sencha ...

  9. js积累

    动态加载JS文件(function (d) { var t=d.createElement("script");t.type="text/javascript" ...

  10. 对cookie的重新认识

    这两天做了一个跟cookie打交道比较多的项目,把其中重新认识的点记录下来: 1.$.cookie(name, value, time),当time为0时,相当于本句没有执行,并不会将原本记录在用户浏 ...