首页 > 其他分享 >django自定义构建模板,通过bootstrap实现菜单隐藏和显示

django自定义构建模板,通过bootstrap实现菜单隐藏和显示

时间:2024-04-26 17:33:06浏览次数:29  
标签:right 自定义 color menu bootstrap django item nav left

实现后的界面
image
image

1.自定义页面模板实现

主页面代码(home.html)

{% extends 'layout.html' %}     #引用模板
{% load static %}
{% block content %}
    <h3>欢迎登录</h3>
{% endblock %}

自定义内容

  • layout.html文件设置(模板)
{% load static %}
{% load menu %}     #导入menu.py文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static '/plugins/bootstrap2/css/bootstrap.css' %}">
    <link rel="stylesheet" href="{% static '/plugins/font-awesome/css/font-awesome.min.css' %}">
    <link rel="stylesheet" href="{% static '/css/commons.css' %}">
    <link rel="stylesheet" href="{% static '/css/menu.css' %}">
    <link rel="stylesheet" href="{% static '/css/nav.css' %}">
    {% block css %}{% endblock %}
</head>
<body>
<div class="pg-header">
    <div class="nav">
        <div class="logo-area left">
            <a href="{% url 'home' %}">
                <span style="font-size: 18px;">jk的管理平台 </span>
            </a>
        </div>
        <div class="right-menu right clearfix">

            <div class="user-info right">
                <a href="#" class="avatar" style="text-decoration: none;">
                    <span style="color: white;margin-right: 5px;">{{ request.user.name }}</span>
                    <img class="img-circle" style="width: 35px;height: 35px;" src="{% static 'images/default.png' %}">
                </a>

                <div class="more-info">
                    <a href="{% url 'logout' %}" class="more-item">注销</a>
                </div>
            </div>
        </div>
    </div>
</div>
<div class="pg-body">
    <div class="left-menu">
        <div class="menu-body">
            {% jk_menu request %} 
        </div>
    </div>
    <div class="right-body">
        {% if request.user.text_list %}
            <ol class="breadcrumb">
                {% for text in request.user.text_list %}
                    <li><a>{{ text }}</a></li>
                {% endfor %}
            </ol>
        {% endif %}
        <div style="padding: 20px;">
            {% block content %}{% endblock %}
        </div>
    </div>
</div>
<script src="{% static 'js/jquery-3.6.0.min.js' %}"></script>
<script src="{% static 'plugins/bootstrap/js/bootstrap.js' %}"></script>
<script src="{% static 'js/menu.js' %}"></script>   <!--通过hide 实现菜单的显示和隐藏-->
</body>
</html>``
  • menu.py内容
from django.template import Library
import copy
from django.conf import settings

register = Library()
@register.inclusion_tag('tag/menu.html')      #使用register.inclusion_tag实现自定义模板
def jk_menu(request):
    user_menu_list = copy.deepcopy(settings.MENU[request.user.role])
    return {"menu_list": user_menu_list}      #把数据传递到menu.html,并对页面进行渲染
  • menu.html内容(自定义想要的样式)
<div class="multi-menu">
    {% for item in menu_list %}
        <div class="item">
            <div class="title">
                <span class="icon-wrap"><i class="fa {{ item.icon }}"></i></span> {{ item.text }}
            </div>
            <div class="body">
                {% for child in item.children %}
                    <a class="" href="{{ child.url }}">{{ child.text }}</a>
                {% endfor %}
            </div>
        </div>
    {% endfor %}
</div>

通过bootstrap实现菜单隐藏和显示

meanu.js的代码实现

$(function () {
    $(".multi-menu .title").click(function () {
        $(this).next().toggleClass('hide');
    });
})

css代码

  • commons.css
.left{
    float: left;
}

.right{
    float: right;
}

.pg-header {
    /*height: 48px;*/
    /*background-color: #1b6d85;*/
}


.pg-body > .left-menu {
    background-color: #EAEDF1;
    position: absolute;
    left: 1px;
    top: 48px;
    bottom: 0;
    width: 220px;
    border: 1px solid #EAEDF1;
    overflow: auto;
}

.pg-body > .right-body {
    position: absolute;
    left: 225px;
    right: 0;
    top: 48px;
    bottom: 0;
    overflow: scroll;
    border: 1px solid #ddd;
    border-top: 0;
    font-size: 13px;
    min-width: 755px;
}



/* 自定义form-radio样式 */
ul.form-radio {
    padding-left: 0;
    list-style-type: none;
}

ul.form-radio li {
    display: inline-block;
    padding-right: 20px;
    padding-top: 7px;
}

ul.form-radio li label {
    font-weight: normal;
    font-size: 13px;
}
  • nav.css
.nav {
    min-width: 980px;
    height: 48px;
    background-color: #2F72AB;
    color: #ffffff;
    line-height: 48px;
    overflow: visible;
    font-size: 12px;
}

.nav .logo-area {
    width: 220px;
    overflow: hidden;
    height: 48px;
    text-align: center;
    /*background-color: #1c5a9c;*/
}

.nav .logo-area > a {
    color: #ffffff;
    text-decoration: none;
    display: inline-block;
}

.nav .logo-area .logo {
    height: 37px;
    width: 37px;
    float: left;
    margin: 6px;
    margin-right: 10px;
}

.nav .left-menu {
    font-size: 13px;
}

.nav .left-menu .menu-item {
    display: inline-block;
    padding: 0 15px;
    cursor: pointer;
    position: relative;
    color: white;
    text-decoration: none;
}

.nav .left-menu .menu-item:hover {
    background-color: #337ab7;

}

.nav .left-menu .menu-item .more-info {
    display: none;
    position: absolute;
    top: 48px;
    left: 0;
    border: 1px solid rgba(0, 0, 0, .15);
    -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
    box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
    background-color: #fff;
    color: #333;
    z-index: 1003;
}

.nav .left-menu .menu-item:hover .more-info {
    display: block;
}

.nav .left-menu .menu-item .more-info .more-item {
    display: block;
    min-width: 120px;
    padding: 0 15px;
    line-height: 35px;
    text-decoration: none;
    color: #000000;

}

.nav .left-menu .menu-item .more-info .more-item:hover {
    background-color: #f1f0f0;
}

.nav .right-menu .user-menu {
    padding: 0 8px;
    cursor: pointer;
    color: white;
    text-decoration: none;
}

.nav .right-menu .user-menu:hover {
    background-color: #337ab7;

}

.nav .right-menu .user-info {
    padding: 0 30px 0 10px;
    height: 48px;
    position: relative;
}

.nav .right-menu .user-info:hover .avatar {
    background-color: #337ab7;
}

.nav .right-menu .user-info .avatar {
    display: inline-block;
    padding: 0 10px;
    height: 48px;
}

.nav .right-menu .user-info .avatar img {
    /* margin-top: 2px;*/
}

.nav .right-menu .user-info .more-info {
    display: none;
    position: absolute;
    top: 48px;
    right: 20px;
    border: 1px solid rgba(0, 0, 0, .15);
    -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
    box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
    background-color: #fff;
    color: #333;
    z-index: 1002;
}

.nav .right-menu .user-info:hover .more-info {
    display: block;
}

.nav .right-menu .user-info .more-info .more-item {
    display: block;
    min-width: 160px;
    padding: 0 15px;
    line-height: 35px;
    text-decoration: none;
    color: #000000;

}

.nav .right-menu .user-info .more-info .more-item:hover {
    background-color: #f1f0f0;
}
  • menu.css

.multi-menu .item {
    background-color: white;
}

.multi-menu .item > .title {
    padding: 10px 5px;
    border-bottom: 1px solid #dddddd;
    cursor: pointer;
    color: #333;
    display: block;
    background: #efefef;
    background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #efefef), color-stop(1, #fafafa));
    background: -ms-linear-gradient(bottom, #efefef, #fafafa);
    background: -o-linear-gradient(bottom, #efefef, #fafafa);
    filter: progid:dximagetransform.microsoft.gradient(startColorStr='#e3e3e3', EndColorStr='#ffffff');
    -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#fafafa',EndColorStr='#efefef')";
    box-shadow: inset 0 1px 1px white;
}

.multi-menu .item > .body {
    border-bottom: 1px solid #dddddd;
}

.multi-menu .item > .body a {
    display: block;
    padding: 5px 20px;
    text-decoration: none;
    border-left: 2px solid transparent;
    font-size: 13px;

}

.multi-menu .item > .body a:hover {
    border-left: 2px solid #2F72AB;
}

.multi-menu .item > .body a.active {
    border-left: 2px solid #2F72AB;
}

标签:right,自定义,color,menu,bootstrap,django,item,nav,left
From: https://www.cnblogs.com/whl2024/p/18160540

相关文章

  • 读《我和Labview》6用户自定义控件
    枚举枚举型控件与下拉列表控件的比较单选按钮控件创建和使用一个枚举控件用户自定义控件创建一个自定义控件自定义控件的组成部分修改控件的组成部分简单动画自定义类型严格自定义类型......
  • 自定义顺序栈-完成十进制转十六进制
    十进制转十六进制输出/********************************************************************* 文件名称: 十进制转十六进制输出* 文件作者:mailLinL@163.com* 创建日期:2024/04/25* 文件功能:对双向链表的增删改查功能的定义* 注意事项:None*......
  • Django admin static files errors All In One
    DjangoadminstaticfileserrorsAllInOne404errorshttp://127.0.0.1:8000/admin/demos$pythonmanage.pyrunserver#admin#123456#admin@django.comhttp://127.0.0.1:8000/admin/login/?next=/admin/(......
  • 自定义error 类型
    packagemainimport( "errors" "fmt")typeerrorCreateVolumestruct{ sstring}funcNewErrorCreateVolume(textstring)error{ returnerrorCreateVolume{text}}func(eerrorCreateVolume)Error()string{ returne.s}funcIs......
  • 在Win10(Win11)或Win Server的WSL上自定义安装Ubuntu(无微软商店)
     在Win10(Win11)WinServer里的WSL上自定义安装Ubuntu(无微软商店) 什么是WSLWSL是Windows系统里的Linux子系统,WindowsSubsystemforLinux(WSL)。我们可以在WindowsServer2016(或Win10/Win11等)上安装UbuntuWindowsSubsystemforLinux(WSL),可以在不退出Windows系......
  • 什么是自定义导入钩子(import hooks),他的作用
    自定义导入钩子(importhooks)是Python的导入系统中的一种机制,允许开发者自定义模块的查找和加载过程。在Python中,导入模块通常涉及几个步骤:查找模块、加载模块、初始化模块和定义模块。导入钩子可以在这些步骤中的任意一个插入自定义行为。自定义导入钩子的主要作用是扩展或......
  • 自定义双向循环链表基本函数接口
    自定义双向循环链表的函数接口/********************************************************************* 文件名称: 双向循环链表的函数接口* 文件作者:mailLinL@163.com* 创建日期:2024/04/24* 文件功能:对双向链表的增删改查功能的定义* 注意事项:No......
  • WPF自定义FixedColumnGrid布局控件
    按照上一节所讲,我已经对布局系统又所了解。接下来我就实现一个布局控件FixedColumnGrid。1.基础版布局控件机制如下,FixedColumnGrid将子控件按照水平排列,每行满两列后换行。每个控件大小相同,高度固定为50。第一步,先重载测量和排列方法protectedoverrideSizeMeasureOverrid......
  • 利用自定义流程表单开发的优势,实现流程化发展!
    要想实现流程化发展,通过低代码技术平台以及自定义流程表单开发的力量,可以将效率大大提升,便于企业进行数字化管理。拥有够灵活、可维护、易操作等优势特点的低代码技术平台拥有强劲的市场竞争力,逐渐在市场中脱颖而出,如果将自定义流程表单开发的优势特点发挥极致,就能快速实现流程化......
  • bootstrap--模态框
    bootstrap4虽然完全不依赖jquery,但是,模态框的弹出动作还是依赖jquery的<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>我的模态框</title><linkrel="stylesheet"href="plugins/boots......