zoukankan      html  css  js  c++  java
  • 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 %}

    转载于:https://www.cnblogs.com/amber-liu/p/9960801.html

  • 相关阅读:
    WCF Server Console
    Restart IIS With Powershell
    RestartService (recursively)
    Copy Files
    Stopping and Starting Dependent Services
    多线程同步控制 ManualResetEvent AutoResetEvent MSDN
    DTD 简介
    Using Powershell to Copy Files to Remote Computers
    Starting and Stopping Services (IIS 6.0)
    java中的NAN和INFINITY
  • 原文地址:https://www.cnblogs.com/twodog/p/12135619.html
Copyright © 2011-2022 走看看