Django母版、组件的使用Django母版、组件的使

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>
			<a href="#">联系我们</a>
			<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 %}

复制代码

通过折叠代码可以看出

只需要往母版上填内容

不需要再打重复的代码

image-20211208093510550

组件

把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>
复制代码