Django 母版、组件的使用
创建母版
bese.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">
{% load static %}
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
{# 网页标题内容块 #}
<title>{% block title %}{% endblock title %}</title>
<link rel="stylesheet" type="text/css" href="{% static 'css/reset.css' %}">
<link rel="stylesheet" type="text/css" href="{% static 'css/main.css' %}">
{# 网页顶部引入文件块 #}
{% block topfiles %}
{% endblock topfiles %}
</head>
<body>
{# 网页顶部欢迎信息块 #}
{% block header_con %}
<div class="header_con">
<div class="header">
<div class="welcome fl">欢迎来到天天生鲜!</div>
<div class="fr">
{% if user.is_authenticated %}
<div class="login_btn fl">
欢迎您:<em style="color: #f89752">{{ user.username }}</em>
</div>
<div class="login_btn fl">
<span>|</span>
<a href="{% url 'user:logout' %}">退出</a>
</div>
{% else %}
<div class="login_btn fl">
<a href="{% url 'user:login' %}">登录</a>
<span>|</span>
<a href="{% url 'user:register' %}">注册</a>
</div>
{% endif %}
<div class="user_link fl">
<span>|</span>
<a href="{% url 'user:user' %}">用户中心</a>
<span>|</span>
<a href="{% url 'cart:cart' %}">我的购物车</a>
<span>|</span>
<a href="{% url 'user:orders' %}">我的订单</a>
</div>
</div>
</div>
</div>
{% endblock header_con %}
{# 网页顶部搜索框块 #}
{% block search_bar %}
<div class="search_bar clearfix">
<a href="{% url 'goods:index' %}" class="logo fl"><img src="{% static 'images/logo.png' %}"></a>
<div class="search_con fl">
<form method="get" action="/search">
<input type="text" class="input_text fl" name="q" placeholder="搜索商品">
<input type="submit" class="input_btn fr" name="" value="搜索">
</form>
</div>
<div class="guest_cart fr">
<a href="{% url 'cart:cart' %}" class="cart_name fl">我的购物车</a>
<div class="goods_count fl" id="show_count">{{ cart_count }}</div>
</div>
</div>
{% endblock search_bar %}
{# 网站主体内容块 #}
{% block body %}
{% endblock body %}
<div class="footer">
<div class="foot_link">
<a href="#">关于我们</a>
<span>|</span>
<span>|</span>
<a href="#">招聘人才</a>
<span>|</span>
<a href="#">友情链接</a>
</div>
<p>CopyRight © 2016 北京天天生鲜信息技术有限公司 All Rights Reserved</p>
<p>电话:010-****888 京ICP备*******8号</p>
</div>
{# 网页底部html元素块 #}
{% block bottom %}
{% endblock bottom %}
{# 网页底部引入文件块 #}
{% block bottomfiles %}
{% endblock bottomfiles %}
</body>
</html>
文件中的增加了块(block),这个块就是继承页面要替换的地方
继承
{% block 块名 %}
中间填内容
{% endblock %}
首行的{% extends ‘base.html’ %}表明这个页面继承base.html,这句代码必须放在页面代码的第一行,被继承的母版的名称要用引号括起来。
写在{% blockmain %}…{% endblock %}之间,而且写在块中的代码才显示与母版不一样的内容,其他部分与母版一样。
{% extends 'base.html' %}
{% load static %}
{% block title %}天天生鲜-首页{% endblock title %}
{% block topfiles %}
<script type="text/javascript" src="{% static 'js/jquery-1.12.4.min.js' %}"></script>
<script type="text/javascript" src="{% static 'js/jquery-ui.min.js' %}"></script>
<script type="text/javascript" src="{% static 'js/slide.js' %}"></script>
{% endblock topfiles %}
{% block body %}
<div class="navbar_con">
<div class="navbar">
<h1 class="fl">全部商品分类</h1>
<ul class="navlist fl">
<li><a href="{% url 'goods:index' %}">首页</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">
{% for type in types %}
<li><a href="/model/{{ type.type_id }}" class="{{ type.type.logo }}">{{ type.type.name }}</a></li>
{% endfor %}
</ul>
<div class="slide fl">
<ul class="slide_pics">
{% for banner in goods_banners %}
<li><a href="" ><img src="{{ banner.image.url }}" alt="幻灯片"></a>li>
{% endfor %}
</ul>
<div class="prev"></div>
<div class="next"></div>
<ul class="points"></ul>
</div>
<div class="adv fl">
{% for banner in promotion_banners %}
<a href="{{ banner.url }}"><img src="{{ banner.image.url }}"></a>
<a href="#"><img src="{% static 'images/adv02.jpg' %}"></a>
{% endfor %}
</div>
</div>
{% for type in types %}
<div class="list_model">
<div class="list_title clearfix">
<h3 class="fl" id="model{{ forloop.counter }}">{{ type.type.name }}</h3>
<div class="subtitle fl">
<span>|</span>
{% for good in t.items %}
{% if good.0 == type.type_id %}
{% for i in good.1 %}
<a href="/detail/{{ i.id }}">
{{ i.name }}
</a>
{% endfor %}
{% endif %}
{% endfor %}
</div>
<a href="/model/{{ type.type.id }}" class="goods_more fr" id="fruit_more">查看更多 ></a>
</div>
<div class="goods_con clearfix">
<div class="goods_banner fl"><img src="{{ type.type.image.url }}"></div>
<ul class="goods_list fl">
{% for good in t.items %}
{% if good.0 == type.type_id %}
{% for i in good.1 %}
<li>
<h4>
<a href="/detail/{{ i.id }}">
{{ i.name }}
</a>
</h4>
<a href="/detail/{{ i.id }}">
<img src="{{ i.image.url }}">
</a>
<div class="prize">¥ {{ i.price }}</div>
</li>
{% endfor %}
{% endif %}
{% endfor %}
</ul>
</div>
</div>
{% endfor %}
{% endblock body %}
通过折叠代码可以看出
只需要往母版上填内容
不需要再打重复的代码
组件
把HTML文件中的部分代码分离出来 变成组件 使用的时候直接引用
创建一个名为 list.html
<div class="foot_link">
<a href="#">关于我们</a>
<span>|</span>
<a href="#">联系我们</a>
<span>|</span>
<a href="#">招聘人才</a>
<span>|</span>
<a href="#">友情链接</a>
</div>
可以通过{% include 'list.html' %}把它引入页面
<div class="navbar_con">
<div class="navbar">
<h1 class="fl">全部商品分类</h1>
<ul class="navlist fl">
<li><a href="{% url 'goods:index' %}">首页</a></li>
<li class="interval">|</li>
<li><a href="">手机生鲜</a></li>
<li class="interval">|</li>
<li><a href="">抽奖</a></li>
</ul>
{% include 'list.html' %}
</div>
</div>