Web框架开发-Django-模板继承和静态文件配置

一、模板继承

目的:减少代码的冗余

语法:

{% block classinfo %}

{% endblock %}

  

具体步骤:

1、创建一个base.html文件

2、把要显示的页面的内容写在这里面,也就是HTML要在浏览器显示的内容

3、在rigth里面写一个盒子

  {% block classinfo %}

  {% endblock %}

在这里写一个空盒子,以后谁来扩展就在这个盒子里面添加相应的内容就行了

4、然后再创建一个.html文件,让这个继承base.html文件

 {% extends 'base.html' %}  # 必须是在文件的第一行

  在基版里面添加内容

  {% block classinfo %}

    <h2>首页</h2>

    <h2>学生信息</h2>

    <h3>{{ class_id }}班</h3>

  {% endblock %}

5、也可以写好多盒子,
  在left中写个盒子
    {% block menu %}
      <p>I see you you</p>
    {% endblock %}

注意:
  盒子里面可以有默认的内容,如果有默认的时候你不扩展就走默认的,如果你扩展了,就替换了,
那么不替换直接追加可以嘛?可以的,那就用下面的方式。
{% block.super %}

{% block menu %}

  {{ block.super }}

  <p>!!!</p>       #先继承父类的,后插入数据

{% endblock %}

  

1、模板继承围绕两点:继承和扩展
          你有什么继承什么,       
          扩展的是盒子,
2、模板中设置的盒子越多越好,因为这样你想扩展的时候就容易了。我想扩展就扩展了。不扩展就不扩展了
3、为了更好的可读性,你也可以给你的 {% endblock %} 标签一个 名字 。例如:

{% block content %}
...
{% endblock content %} 

4、如果你发现你自己在大量的模版中复制内容,那可能意味着你应该把内容移动到父模版中的一个 {% block %} 中。

最后,请注意你并不能在一个模版中定义多个相同名字的 block 标签。这个限制的存在是因为block标签的作用是“双向”的。这个意思是,block标签不仅提供了一个坑去填,它还在 _父模版_中定义了填坑的内容。如果在一个模版中有两个名字一样的 block 标签,模版的父模版将不知道使用哪个block的内容。

具体例子说明

urls.py

re_path(r'^text/(\d+)', views.text)

  

views.py

def text(request, class_id):
    # 班级变量
    print(class_id)     # 拿到的是你在路径里输入的几就是几
    # 数据库查询
    return render(request, "text.html", {"class_id": class_id})

  

templatite/base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    {% block title %}
    <title>base</title>
    {% endblock %}
    <!--最新版本的bootstrap核心CSS文件-->
    <link rel="stylesheet"  href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"
          integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

    <title>My amazing site</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .header {
            width: 100%;
            height: 50px;
            background-color: #369;
        }
        .right {
            height: 400px;
            background-color: silver;
        }
    </style>
</head>
<body>
{# 导航条 #}
<nav class="navbar navbar-primary navbar-inverse">
    <div class="container-fluid">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
                    data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="#">Brand</a>
        </div>

        <!--Collect the nav links,forms, and other content for togging-->
        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
            <ul class="nav navbar-nav">
                <li class="active"><a href="#">Link <span class="sr-only">(current)</span> </a> </li>
                <il><a href="#">Link</a> </il>
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="drodown" role="button" aria-haspopup="true"
                       aria-expanded="false">Dropdown <span class="caret"></span> </a>
                    <ul class="dropdown-menu">
                        <li><a href="#">Action</a> </li>
                        <li><a href="#">Another action</a> </li>
                        <li><a href="#">Something else here</a> </li>
                        <li role="separator" class="divider"></li>
                        <li><a href="#">Separated link</a> </li>
                        <li role="separator" class="divider"></li>
                        <li><a href="#">One more separated link</a> </li>
                    </ul>
                </li>
            </ul>
        </div>
    </div>
</nav>
{# 内容 #}
<div class="containers">
    <div class="row">
        <div class="col-md-11 col-lg-offset-1">
            <div class="left col-md-3">
                {% block menu %}
                    <div class="list-group">
                        <a href="#" class="list-group-item active">
                            学生班级
                        </a>
                        <a href="/text/6" class="list-group-item">s6</a>
                        <a href="/text/7" class="list-group-item">s7</a>
                        <a href="/text/8" class="list-group-item">s8</a>
                        <a href="/text/9" class="list-group-item">s9</a>
                    </div>
                {% endblock %}
            </div>
            <div class="right col-md-8">
                {# 定义一个盒子#}
                {% block classinfo %}
                {% endblock %}
            </div>
        </div>
    </div>
</div>


</body>
</html>

template/text.html继承上面的文件

{% extends "base.html" %}

{% block classinfo %}
    <h1>学生信息</h1>
    <h3>{{ class_id }}</h3>
{% endblock %}


{#追加#}
{% block menu %}
    {{ block.super }}
    <a href="">学生信息</a>
{% endblock %}

  

二、静态文件配置

我们自己导入的一些包就叫做静态文件

1、在全局中先创建一个static的包,

2、在static里面导入我们的bootstrap,还是jquery等

3、然后在settings.py中加上一些配置

STATIC_URL = '/static/'   #这个配置就相当于下面配置的别名,如果这里的名字修改了就按照这里的名字去导入
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,"static")  
]

  

4、导入css,js,jquery

<link rel = "stysheet",href= "/static/index.css/"> 

<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css">

  

  

  






转载于:https://www.cnblogs.com/mike-liu/p/9634709.html

基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人运动设备中的六轴姿态传感器,它集成了三轴陀螺仪三轴加速度计。这款传感器能够实时监测并提供设备的角速度线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp``MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式I2C地址,`getAcceleration()``getGyroscope()`则分别用于获取加速度角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()``getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准滤波,以消除噪声漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客其他开源资源是学习解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值