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. Nginx的启动与停止,重启

    1.先确定nginx所在的文件位置 如: 重启 1.验证nginx配置文件是否正确 方法一:进入nginx安装目录sbin下,输入命令./nginx -t 2.重启Nginx服务 方法一:进入ngin ...

  2. mysql5.7 编码统一utf-8

    查看mysql数据库编码: show variables like 'character%'; mysql> show variables like 'character%'; +------- ...

  3. 分享jQuery封装好的一些常用操作

    1. 禁止右键点击 $(document).ready(function(){   $(document).bind("contextmenu",function(e){      ...

  4. 完美解决jQuery符号$与其他javascript 库、框架冲突的问题

    目前有大量的 javascript 开发框架,其中有一部分使用 $ 作为调用符号,这可能导致相互之间的冲突,而 jQuery 为解决这个问题,可以在 jQuery 导入时放弃 $ 使用权,届时 $ 则 ...

  5. OpenCV学习:实现简单的图像叠加

    本实例使用简单的线性叠加方法来实现两幅图像的叠加,主要使用的知识如下: 1)线性融合 2)addWeighted函数 //! computes weighted sum of two arrays ( ...

  6. OpenCV学习:播放avi视频文件

    #if 0 //播放avi视频文件(IplImage) #include <opencv2/opencv.hpp> using namespace std; #pragma comment ...

  7. downtown uptown

    Downtown is a term primarily used in North America by English speakers to refer to a city's core (or ...

  8. Zookeeper异常org.apache.zookeeper.KeeperException$ConnectionLossException

    在虚拟机上安装了CenOS Linux系统,然后配置好了 zookeeper的集群环境,在本地写了一个Zookeeper测试程序,如下: package com.xbq.zookeeper; impo ...

  9. mac 安装mysql 修改密码

    我草!!! 上网查资料,安装mysql,一大推废话,简直就是他妈的瞎扯淡,真是能他妈的瞎编,草! 为了不让后面的同学看到那些狗屁不通的资料,我把自己安装mysql的步骤,以及修改mysql密码的方法梳 ...

  10. 嵌入式Linux下Qt的中文显示

    一般情况下,嵌入式Qt界面需要中文显示,下面总结自己在项目中用到的可行的办法 1,下载一种中文简体字体,比如我用的是”方正准圆简体“,把字体文件放在ARM开发板系统的Qt字库中,即/usr/lib/f ...