django頁面之間的前端模板繼承或者引入詳解(上)


1.{% load staticfiles %}

 

 

 

 

2.{% load rbac %}

    {% menu_html request %}           這部分就會變成用inclusion_tag生成的menu_html

 

 

 左側菜單的生成templatetags目錄下的rbac.py

功能;生成頁面中的左側菜單用inclusion_tag標簽

運用:我們只需要在需要用到的文件中引用就可以生成這個菜單部分的內容。

  需要用到的模板文件中:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re
from django.template import Library
from django.conf import settings
from collections import OrderedDict

register = Library()


@register.inclusion_tag('rbac/static_menu.html')
def static_menu(request):
    """
    創建一級菜單
    :return:
    """
    menu_list = request.session[settings.MENU_SESSION_KEY]
    return {'menu_list': menu_list}


@register.inclusion_tag('rbac/multi_menu.html')
def multi_menu(request):
    """
    創建二級菜單
    :return:
    """
    menu_dict = request.session[settings.MENU_SESSION_KEY]

    # 對字典的key進行排序
    key_list = sorted(menu_dict)

    # 空的有序字典
    ordered_dict = OrderedDict()

    for key in key_list:
        val = menu_dict[key]
        val['class'] = 'hide'

        for per in val['children']:
            regex = "^%s$" % (per['url'],)
            if re.match(regex, request.path_info):
                per['class'] = 'active'
                val['class'] = ''
        ordered_dict[key] = val

    return {'menu_dict': ordered_dict}
inclusion_tag生成左側菜單

 

需要的模板文件templates下的menu.html

menu.html
# menu.html

<div class="menu">
    {% for k,menu in menu_dic.items %}
        {# 一級菜單 #}
        <div class="menu_first">{{ menu.menu_title }}</div>

        {# 二級菜單(就是一級菜單下邊的內容) #}
        {% if menu.active %}
            <ul class="">
        {% else %}
            <ul class="hide">
        {% endif %}

    {% for child in menu.children %}
        {% if child.active %}
            <li class="menu_second active"><a href="{{ child.permission_url }}">{{ child.permission__title }}</a></li>
        {% else %}
            <li class="menu_second"><a href="{{ child.permission_url }}">{{ child.permission__title }}</a></li>
        {% endif %}
    {% endfor %}
    </ul>
    {% endfor %}
</div>


 

使用inclusion_tag的文件示例:

# 這個是django的模板文件
{% load rbac %}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}模板{% endblock %}</title>
    <link rel="stylesheet" href="{% static 'rbac/bootstrap-3.3.7/css/bootstrap.min.css' %}">
    <link rel="stylesheet" href="{% static 'rbac/menu.css' %}">
    {% block css %} {% endblock css %}

</head>
<body>
<div class="container-fluid">
    <div class="row">
        <div class="col-md-2 menu">
            {% block menu %}
                {% menu_html request %}    {# 用inclusion_tag生成的menu_html #}
            {% endblock menu %}
        </div>
        <div class="col-md-9">
            {% block content %}
            content
            {% endblock %}
        </div>
    </div>
</div>

inclusion_tag的使用模板文件

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM