龙空技术网

项目实战Django Web开发进阶-9-模板继承升级web页面

逸剑听潮 112

前言:

而今咱们对“web网页的导航栏怎么做”都比较讲究,看官们都想要了解一些“web网页的导航栏怎么做”的相关内容。那么小编在网摘上收集了一些有关“web网页的导航栏怎么做””的相关资讯,希望朋友们能喜欢,姐妹们一起来了解一下吧!

目前登录,注册和订单页面,都是独立的页面。如果想要有统一的样式,统一的导航栏,那么就需要对每一个页面进行修改,非常麻烦。

可以使用模板继承,Django 模板引擎中最强大(因此也是最复杂)的部分是模板继承。模板继承可以构建基本的“骨架”模板,该模板包含站点的所有常见元素,并定义子模板可以覆盖的块。在 templates 目录下,创建公共模板 base.html,它定义了一个 HTML 骨架文档,将页面分成上中下三栏。子模板使用具体内容填充公共模板中空白块 block。

步骤:

创建公共模板创建子模版文件创建和引用静态文件,例如定义样式表文件,图片文件创建公共模板

公共模板包含了整个页面的框架,一般有公共部分,例如欢迎部分,导航部分,页脚部分,和板块定义。在公共 templates/base.html 中输入以下内容:

{% load static %}<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width-device-width, initital-scale=1.0">    <link rel="stylesheet" href="{% static 'css/iorder.css' %}">    <title>        {% block title %} 点餐系统 {% endblock %}    </title></head><body>    <div class="main">        {% block nevbar %}            <div class="nevbar">                <div class="flow-left"><img src="{% static 'img/order.jpg' %}" width="32px" title="点餐"></div>                <div class="flow-left">点餐</div>                <div class="flow-right">登录</div>                <div class="flow-right">注册</div>                <div class="flow-right">退出</div>            </div>        {% endblock %}        {% block section %}                    {% endblock %}        {% block footer %}            <div class="footer">                @ 版权信息            </div>        {% endblock %}    </div></body></html>

{% block 模板块名%},标记所做的是告诉模板引擎子模板可以覆盖模板的那些部分。这里定义了 tilte,nevbar,section,footer 四个 block,可以在子模板中根据需要覆盖这些 block。

此时的导航栏还都没有添加链接。在下一节“11-升级web页面,导航,分页”将会详细介绍。

创建子模版文件

修改 templates/users/login.html 子模板,如下:

{% extends 'base.html' %}{% block title %}    登陆页面{% endblock%}{% block section %}<div>    <p>登录页面</p>    <p style="color: red;">{{ error }}</p>    <div>        <form action="" method="POST">            {% csrf_token %}            <div>账号: <input type="text" name="username"></div>            <div>密码: <input type="password" name="password"></div>            <div><input type="submit" value="登录"></div>        </form>    </div>    <div><a href="{% url 'users:regist' %}">点击注册</a></div></div>{% endblock%}

{% extend 公共模板 html 文件名 %},需要写在子模板中的开头,表示继承公共模板。它告诉模板引擎该模板“扩展”了另一个模板。模板系统评估该模板时,首先会找到公共模板,也就是 base.html。

{% block 模板块名%},写在公共模板中为可以被继承并重写的内容,写在子模板中为替换公共模板中相同名字的模板块内容。

{% endblock %},标记 block 结束的位置。

修改 templates/users/register.html 子模板,如下:

{% extends 'base.html' %}{% block title %}注册页面{% endblock%}{% block section %}<div>    <p>注册页面</p>    <p style="color: red;">{{ error }}</p>      <form action="" method="POST">        {% csrf_token %}                {% if username %}        <div>账号: <input type="text" name="username" value="{{ username }}"></div>        {% else %}        <div>账号: <input type="text" name="username"></div>        {% endif %}                <div>密码: <input type="password" name="password"></div>        <div><input type="submit" value="提交"></div>    </form></div>{% endblock%}

修改 templates/orders/index.html 子模板,如下:

{% extends 'base.html' %}{% block title %}    订单页面{% endblock%}{% block section %}<div >    <h3>今日 {% now "Y-m-d" %} 订餐订单:</h3>    <table style="display: inline-block; ">        <tr>        <th>编号</th>        <th>姓名</th>        <th>下单时间</th>        <th>菜品</th>        <th>餐馆</th>        <th>数量</th>        <th>辣味</th>        <th>吃饭时间</th>        </tr>        {% for order in order_list %}            <tr>                <td>{{ order.id }}</td>                <td>{{ order.username }}</td>                <td>{{ order.createdate }}</td>                <td>{{ order.dish }}</td>                <td>{{ order.dish.restaurant }}</td>                <td>{{ order.quantity }}</td>                    <td>{{ order.get_spicy_display }}</td>                    <td>{{ order.get_dinnertime_display }}</td> <!--显示中餐/午餐的value-->                </tr>        {% endfor %}                    </table></div>{% endblock%}
定义样式表文件

之前是把样式表定义在了 html 文件中,甚至嵌入到了页面元素中。推荐的做法是,引用第三方的 css 样式表框架,或者将样式都统一放到一个文件中,方便管理和修改。这里在 static/css 目录下,创建样式表文件 iorder.css,将用到的样式都放到给文件里,然后在公共模板 base.html 中引用:

{% load static %}<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width-device-width, initital-scale=1.0">    <link rel="stylesheet" href="{% static 'css/iorder.css' %}">    <title>        {% block title %} 点餐系统 {% endblock %}    </title></head> 

{% load static %} 加载在 setting.py 中的STATICFILES_DIRS定义的 static目录。然后在模板中使用load标签来加载 static 标签。

<link rel=“stylesheet” href={%static ‘css/iorder.css’%}> 通过 static 标签加载相应的 css 文件。

同样的方法,也可以加载 Javascript 文件,图片等静态文件。

建议按照 项目实战Django Web开发-16-目录结构 的顺序进行学习 iorder 项目的开发过程。

源代码在 github 中:

标签: #web网页的导航栏怎么做