inclusion_tag

inclusion_tag

将模板和数据结合在一起,如果有很多路由对应的视图函数,返回的页面中都包含一些共同的东西,不需要再每个视图函数中,传递给模板,render再解析,传给浏览器.而是直接像是,自定义标签和过滤器一样

1,在app下创建一个templatetags文件,

2,创建一个 .py文件:代码如下

from django import template

register = template.Library()

# from django.conf import settings
import re


@register.inclusion_tag('rbac/menu.html')    会结合这个html一块返回给调用母版
def menu(request):
    menu_list = request.session.get('MENU_SESSION_KEY')
    for item in menu_list:
        url = item['url']
        if re.match('^{}$'.format(url), request.path_info):
            item['class'] = 'active'
            break
    
    return {"menu_list": menu_list}

template文件下rabc下的menu.html中

<div class="static-menu">

    {% for item in menu_list %}
        <a href="{{ item.url }}" class="{{ item.class }}">
            <span class="icon-wrap"><i class="fa {{ item.icon }}"></i></span> {{ item.title }}</a>

    {% endfor %}

</div>

母版中,(几条路由都要走的)

layout.html中

<div class="pg-body">
    <div class="left-menu">
        <div class="menu-body">
            {% load rbac %}
            {% menu request %}   #menu  inclusion_tag的名字    request包含标签的参数,也可以不用传,因为
#为模板中可以直接调用
</div> </div>

 

 

  

 

posted @ 2018-11-15 10:32  团子emma  阅读(133)  评论(0)    收藏  举报