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. SVN版本冲突,导致出现Files 的值“ < < < < < < < .mine”无效。路径中具有非法字符。

    SVN版本冲突,导致出现Files 的值“ < < < < < < < .mine”无效.路径中具有非法字符. 右键编辑.... 打开并删除含有'<&l ...

  2. ThinkPHP中调用PHPExcel

    //引入PHPExcel vendor('PHPExcel.PHPExcel'); // Create new PHPExcel object $objPHPExcel = new PHPExcel( ...

  3. 获取用户真实的IP

    在实际项目很使用的函数,果断收集了   function get_client_ip() { if (getenv("HTTP_CLIENT_IP") && str ...

  4. Upgrade site collection from SP2010 to SP2013(Part 2)

    内容中包含 base64string 图片造成字符过多,拒绝显示

  5. 自定义HttpModule,用于未登录用户,不弹出Windows认证窗口,而是跳转回SSO站点

    2012年的一篇随笔记录,可以学习到如何自定义HttpModule,而具体里面针对需求开发的代码,可能未必能让大伙了解到什么,可快速扫描而过. using System; using System.W ...

  6. linux系统中RPM包的通用命名规则

    http://blog.csdn.net/kexiuyi/article/details/53292358

  7. @ResponseBody将集合数据转换为json格式并返回给客户端

    spring-mvc.xml: <beans xmlns:mvc="http://www.springframework.org/schema/mvc" > <m ...

  8. Xcode模版生成文件头部注释

    在使用Xcode创建工程或者新建类的时候,顶部都会有一些xcode帮我们生成的注释 //// MySingletonClass.h// 单例模式//// Created by mark on 15/8 ...

  9. HTML基础做出属于自己的完美网页

    HTML HTML解释: HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的规则(W3C),大家都来 ...

  10. django 自定模板标签的注册

    首先注册方法一般都是先实例化一个template.Library.如: from django import template register = template.Library() 1.注册自定 ...