天天生鲜-模板继承和静态文件


一、模板继承

Django 使用了“模板继承”的概念:这就是 {% extends "base.html" %}所做的事。它意味着 “首先载入名为 ‘base’ 的模板中的内容到当前模板,然后再处理本模板中的其余内容。”总之,模板继承让你在模板间大大减少冗余内容:每一个模板只需要定义它独特的部分即可。

在项目中一个页面需要修改还好,那么如果当多处并且多个页面都需要修改,那么就大大增加工作量。当时当多个页面中多存在相同的部分,使用模板继承就大大减少开发和维护人员的压力。

典型的应用就是在网站开头或者网站结尾处。

1、父模板:

如果一段代码重复出现,为了效率,通常会把这段代码定义到模板中,这个模板就是父模板。父模板定义在templates目录下。

2、子模板:

需要继承父模板格式的模板,定义在templates/应用目录下。

模板继承中使用block标签,格式:

{% block 名称 %}
预留区域,可以编写默认内容,也可以没有默认内容
{% endblock 名称 %}

二、实例

首先在项目settings中配置模板目录

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')]
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

1、主要页面

页面说明:

1、index.html   网站首页,顶部“注册|登录”和用户信息是切换显示的,商品分类菜单点击直接链接滚动到本页面商品模块。首页已加入幻灯片效果。

2、list.html  商品列表页,商品分类菜单鼠标悬停时切换显示和隐藏,点击菜单后链接到对应商品的列表页。


3、detail.html  商品详情页,某一件商品的详细信息。


4、cart.html 我的购物车页,列出已放入购物车上的商品


5、place_order.html 提交订单页


6、login.html 登录页面


7、register.html 注册页面,已加入了初步的表单验证效果,此效果在课程中已讲述如何制作。


8、user_center_info.html 用户中心-用户信息页 用户中心功能一,查看用户的基本信息


9、user_center_order.html 用户中心-用户订单页 用户中心功能二,查看用户的全部订单


10、user_center_site.html 用户中心-用户收货地址页 用户中心功能三,查看和设置用户的收货地址

index.html  网站首页

 detail.html 商品页

login.html 用户登录页

register.html 用户注册

 index.html页尾

因此模板继承关系可以列为

所有页面均继承尾部,部分页面继承页首

来看一下具体网站首页的html代码

DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>天天生鲜-首页title>
    <link rel="stylesheet" type="text/css" href="css/reset.css">
    <link rel="stylesheet" type="text/css" href="css/main.css">
    <script type="text/javascript" src="js/jquery-1.12.4.min.js">script>
    <script type="text/javascript" src="js/jquery-ui.min.js">script>
    <script type="text/javascript" src="js/slide.js">script>
head>
<body>
    <div class="header_con">
        <div class="header">
            <div class="welcome fl">欢迎来到天天生鲜!div>
            <div class="fr">
                <div class="login_info fl">
                    欢迎您:<em>张 山em>
                div>
                <div class="login_btn fl">
                    <a href="login.html">登录a>
                    <span>|span>
                    <a href="register.html">注册a>
                div>
                <div class="user_link fl">
                    <span>|span>
                    <a href="user_center_info.html">用户中心a>
                    <span>|span>
                    <a href="cart.html">我的购物车a>
                    <span>|span>
                    <a href="user_center_order.html">我的订单a>
                div>
            div>
        div>        
    div>

    <div class="search_bar clearfix">
        <a href="index.html" class="logo fl"><img src="images/logo.png">a>
        <div class="search_con fl">
            <input type="text" class="input_text fl" name="" placeholder="搜索商品">
            <input type="button" class="input_btn fr" name="" value="搜索">
        div>
        <div class="guest_cart fr">
            <a href="#" class="cart_name fl">我的购物车a>
            <div class="goods_count fl" id="show_count">1div>
        div>
    div>

    <div class="navbar_con">
        <div class="navbar">
            <h1 class="fl">全部商品分类h1>
            <ul class="navlist fl">
                <li><a href="">首页a>li>
                <li class="interval">|li>
                <li><a href="">手机生鲜a>li>
                <li class="interval">|li>
                <li><a href="">抽奖a>li>
            ul>
        div>
    div>

    <div class="center_con clearfix">
        <ul class="subnav fl">
            <li><a href="#model01" class="fruit">新鲜水果a>li>
            <li><a href="#model02" class="seafood">海鲜水产a>li>
            <li><a href="#model03" class="meet">猪牛羊肉a>li>
            <li><a href="#model04" class="egg">禽类蛋品a>li>
            <li><a href="#model05" class="vegetables">新鲜蔬菜a>li>
            <li><a href="#model06" class="ice">速冻食品a>li>
        ul>
        <div class="slide fl">
            <ul class="slide_pics">
                <li><img src="images/slide.jpg" alt="幻灯片">li>
                <li><img src="images/slide02.jpg" alt="幻灯片">li>
                <li><img src="images/slide03.jpg" alt="幻灯片">li>
                <li><img src="images/slide04.jpg" alt="幻灯片">li>
            ul>
            <div class="prev">div>
            <div class="next">div>
            <ul class="points">ul>
        div>
        <div class="adv fl">
            <a href="#"><img src="images/adv01.jpg">a>
            <a href="#"><img src="images/adv02.jpg">a>
        div>
    div>

    <div class="list_model">
        <div class="list_title clearfix">
            <h3 class="fl" id="model01">新鲜水果h3>
            <div class="subtitle fl">
                <span>|span>
                <a href="#">鲜芒a>
                <a href="#">加州提子a>
                <a href="#">亚马逊牛油果a>
            div>
            <a href="#" class="goods_more fr" id="fruit_more">查看更多 >a>
        div>

        <div class="goods_con clearfix">
            <div class="goods_banner fl"><img src="images/banner01.jpg">div>
            <ul class="goods_list fl">
                <li>
                    <h4><a href="#">草莓a>h4>
                    <a href="#"><img src="images/goods/goods003.jpg">a>
                    <div class="prize">¥ 30.00div>
                li>
                <li>
                    <h4><a href="#">葡萄a>h4>
                    <a href="#"><img src="images/goods/goods002.jpg">a>
                    <div class="prize">¥ 5.50div>
                li>
                <li>
                    <h4><a href="#">柠檬a>h4>
                    <a href="#"><img src="images/goods/goods001.jpg">a>
                    <div class="prize">¥ 3.90div>
                li>
                <li>
                    <h4><a href="#">奇异果a>h4>
                    <a href="#"><img src="images/goods/goods012.jpg">a>
                    <div class="prize">¥ 25.80div>
                li>
            ul>
        div>
    div>

    <div class="list_model">
        <div class="list_title clearfix">
            <h3 class="fl" id="model02">海鲜水产h3>
            <div class="subtitle fl">
                <span>|span>
                <a href="#">河虾a>
                <a href="#">扇贝a>                
            div>
            <a href="#" class="goods_more fr">查看更多 >a>
        div>

        <div class="goods_con clearfix">
            <div class="goods_banner fl"><img src="images/banner02.jpg">div>
            <ul class="goods_list fl">
                <li>
                    <h4><a href="#">青岛野生海捕大青虾a>h4>
                    <a href="#"><img src="images/goods/goods018.jpg">a>
                    <div class="prize">¥ 48.00div>
                li>
                <li>
                    <h4><a href="#">扇贝a>h4>
                    <a href="#"><img src="images/goods/goods019.jpg">a>
                    <div class="prize">¥ 46.00div>
                li>
                <li>
                    <h4><a href="#">冷冻秋刀鱼a>h4>
                    <a href="#"><img src="images/goods/goods020.jpg">a>
                    <div class="prize">¥ 19.00div>
                li>
                <li>
                    <h4><a href="#">基围虾a>h4>
                    <a href="#"><img src="images/goods/goods021.jpg">a>
                    <div class="prize">¥ 25.00div>
                li>
            ul>
        div>
    div>

    <div class="list_model">
        <div class="list_title clearfix">
            <h3 class="fl" id="model03">猪牛羊肉h3>
            <div class="subtitle fl">
                <span>|span>
                <a href="#">鲜芒a>
                <a href="#">加州提子a>
                <a href="#">亚马逊牛油果a>
            div>
            <a href="#" class="goods_more fr">查看更多 >a>
        div>

        <div class="goods_con clearfix">
            <div class="goods_banner fl"><img src="images/banner03.jpg">div>
            <ul class="goods_list fl">
                <li>
                    <h4><a href="#">维多利亚葡萄维多利亚葡萄维多利亚葡萄维多利亚葡萄a>h4>
                    <a href="#"><img src="images/goods.jpg">a>
                    <div class="prize">¥ 38.00div>
                li>
                <li>
                    <h4><a href="#">维多利亚葡萄a>h4>
                    <a href="#"><img src="images/goods.jpg">a>
                    <div class="prize">¥ 38.00div>
                li>
                <li>
                    <h4><a href="#">维多利亚葡萄a>h4>
                    <a href="#"><img src="images/goods.jpg">a>
                    <div class="prize">¥ 38.00div>
                li>
                <li>
                    <h4><a href="#">维多利亚葡萄a>h4>
                    <a href="#"><img src="images/goods.jpg">a>
                    <div class="prize">¥ 38.00div>
                li>
            ul>
        div>
    div>

    <div class="list_model">
        <div class="list_title clearfix">
            <h3 class="fl" id="model04">禽类蛋品h3>
            <div class="subtitle fl">
                <span>|span>
                <a href="#">鲜芒a>
                <a href="#">加州提子a>
                <a href="#">亚马逊牛油果a>
            div>
            <a href="#" class="goods_more fr">查看更多 >a>
        div>

        <div class="goods_con clearfix">
            <div class="goods_banner fl"><img src="images/banner04.jpg">div>
            <ul class="goods_list fl">
                <li>
                    <h4><a href="#">维多利亚葡萄维多利亚葡萄维多利亚葡萄维多利亚葡萄a>h4>
                    <a href="#"><img src="images/goods.jpg">a>
                    <div class="prize">¥ 38.00div>
                li>
                <li>
                    <h4><a href="#">维多利亚葡萄a>h4>
                    <a href="#"><img src="images/goods.jpg">a>
                    <div class="prize">¥ 38.00div>
                li>
                <li>
                    <h4><a href="#">维多利亚葡萄a>h4>
                    <a href="#"><img src="images/goods.jpg">a>
                    <div class="prize">¥ 38.00div>
                li>
                <li>
                    <h4><a href="#">维多利亚葡萄a>h4>
                    <a href="#"><img src="images/goods.jpg">a>
                    <div class="prize">¥ 38.00div>
                li>
            ul>
        div>
    div>

    <div class="list_model">
        <div class="list_title clearfix">
            <h3 class="fl" id="model05">新鲜蔬菜h3>
            <div class="subtitle fl">
                <span>|span>
                <a href="#">鲜芒a>
                <a href="#">加州提子a>
                <a href="#">亚马逊牛油果a>
            div>
            <a href="#" class="goods_more fr">查看更多 >a>
        div>

        <div class="goods_con clearfix">
            <div class="goods_banner fl"><img src="images/banner05.jpg">div>
            <ul class="goods_list fl">
                <li>
                    <h4><a href="#">维多利亚葡萄维多利亚葡萄维多利亚葡萄维多利亚葡萄a>h4>
                    <a href="#"><img src="images/goods.jpg">a>
                    <div class="prize">¥ 38.00div>
                li>
                <li>
                    <h4><a href="#">维多利亚葡萄a>h4>
                    <a href="#"><img src="images/goods.jpg">a>
                    <div class="prize">¥ 38.00div>
                li>
                <li>
                    <h4><a href="#">维多利亚葡萄a>h4>
                    <a href="#"><img src="images/goods.jpg">a>
                    <div class="prize">¥ 38.00div>
                li>
                <li>
                    <h4><a href="#">维多利亚葡萄a>h4>
                    <a href="#"><img src="images/goods.jpg">a>
                    <div class="prize">¥ 38.00div>
                li>
            ul>
        div>
    div>

    <div class="list_model">
        <div class="list_title clearfix">
            <h3 class="fl" id="model06">速冻食品h3>
            <div class="subtitle fl">
                <span>|span>
                <a href="#">鲜芒a>
                <a href="#">加州提子a>
                <a href="#">亚马逊牛油果a>
            div>
            <a href="#" class="goods_more fr">查看更多 >a>
        div>

        <div class="goods_con clearfix">
            <div class="goods_banner fl"><img src="images/banner06.jpg">div>
            <ul class="goods_list fl">
                <li>
                    <h4><a href="#">维多利亚葡萄维多利亚葡萄维多利亚葡萄维多利亚葡萄a>h4>
                    <a href="#"><img src="images/goods.jpg">a>
                    <div class="prize">¥ 38.00div>
                li>
                <li>
                    <h4><a href="#">维多利亚葡萄a>h4>
                    <a href="#"><img src="images/goods.jpg">a>
                    <div class="prize">¥ 38.00div>
                li>
                <li>
                    <h4><a href="#">维多利亚葡萄a>h4>
                    <a href="#"><img src="images/goods.jpg">a>
                    <div class="prize">¥ 38.00div>
                li>
                <li>
                    <h4><a href="#">维多利亚葡萄a>h4>
                    <a href="#"><img src="images/goods.jpg">a>
                    <div class="prize">¥ 38.00div>
                li>
            ul>
        div>
    div>

    <div class="footer">
        <div class="foot_link">
            <a href="#">关于我们a>
            <span>|span>
            <a href="#">联系我们a>
            <span>|span>
            <a href="#">招聘人才a>
            <span>|span>
            <a href="#">友情链接a>        
        div>
        <p>CopyRight ? 2016 北京天天生鲜信息技术有限公司 All Rights Reservedp>
        <p>电话:010-****888    京ICP备*******8号p>
    div>
    <script type="text/javascript" src="js/slideshow.js">script>
    <script type="text/javascript">
        BCSlideshow('focuspic');
        var oFruit = document.getElementById('fruit_more');
        var oShownum = document.getElementById('show_count');

        var hasorder = localStorage.getItem('order_finish');

        if(hasorder)
        {
            oShownum.innerHTML = '2';
        }

        oFruit.onclick = function(){
            window.location.href = 'list.html';
        }
    script>
body>
html>

2、templates目录

templates
  ----base.hml
  ----base_foot.html

base.html 页首

包括全文检索,购物车,以及用户登录信息的判断

{% extends 'base_foot.html' %}

{% block body %}

    <div class="header_con">
        <div class="header">
            <div class="welcome fl">欢迎来到天天生鲜!div>
            <div class="fr">
{#                判断是否已经登录#}
                {% if request.session.user_name|default:'' != '' %}
{#                    default过滤器进行判断如果request.session.user_name不等于空字符串则用户登陆状态为true#}
{#                    也就是说当用户为已登陆状态时则显示用户名#}

{#                    class="login_info fl"#}
                <div class="login_btn fl">欢迎您:<em>{{ request.session.user_name }}em>
                    <span>|span>
                    <em><a href="/user/logout/">退出a>em>
                div>
                {% else %}
                <div class="login_btn fl">
                    <a href="/user/login/">登录a>
                    <span>|span>
                    <a href="/user/register/">注册a>
                div>
                {% endif %}
                <div class="user_link fl">
                    <span>|span>
                    <a href="/user/info/">用户中心a>
                    <span>|span>
                    <a href="/cart/">我的购物车a>
                    <span>|span>
                    <a href="/user/order/">我的订单a>
                div>
            div>
        div>
    div>


    <div class="search_bar clearfix">
        <a href="/" class="logo fl"><img src="/static/images/logo.png">a>
        {% if page_name == 1 %}
            <div class="sub_page_name fl">|    {{ title }}div>
        {% endif %}
        <div class="search_con fl">
             <script>
                $(function () {
                    $('.input_btn').click(function () {
                        q = $('.input_text').val();
                        location.href = '/search/?q='+q+'&page=1'
                    })
                })

            script>
            <input type="text" class="input_text fl" name="q" placeholder="搜索商品">
{#            这里的name值为q#}
            <input type="button" class="input_btn fr" name="" value="搜索">
        div>

        {% if guest_cart == 1 %}
            <div class="guest_cart fr">
                <a href="/cart/" class="cart_name fl">我的购物车a>
                <div class="goods_count fl" id="show_count">{{ cart_count }}div>
            div>
        {% endif %}
    div>
{% block center_body %}{% endblock center_body %}

{% endblock body %}

base_foot.html 页脚

包括和企业信息等

DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>{{ title }}天天生鲜title>
    <link rel="stylesheet" type="text/css" href="/static/css/reset.css">
    <link rel="stylesheet" type="text/css" href="/static/css/main.css">
    <script type="text/javascript" src="/static/js/jquery-1.12.4.min.js">script>
{#    <script type="text/javascript" src="/static/js/register.js">script>#}
    {% block head %}{% endblock head %}
{#预留区域#}
head>
<body>

{% block body %}{% endblock body %}

    <div class="footer no-mp">
        <div class="foot_link">
            <a href="#">关于我们a>
            <span>|span>
            <a href="#">联系我们a>
            <span>|span>
            <a href="#">招聘人才a>
            <span>|span>
            <a href="#">友情链接a>
        div>
        <p>CopyRight ? 2016 北京天天生鲜信息技术有限公司 All Rights Reservedp>
        <p>电话:010-****888    京ICP备*******8号p>
    div>

body>
html>

这里的模板语言和JavaScript后续会说到。

注:这个电商网站是博主在接触Django之后做的第一个项目,所以还需要修改。如果有需要项目相关视频资源的朋友可以博客园私信,或者评论区留言,博主会在看到的第一时间分享。
附github源码地址(包含静态文件):https://github.com/weilanhanf/daily_fresh_demo

相关