django项目使用模板继承

模板继承

  • 在实际的页面显示中会有多个页面有相同的显示信息,如果每个页面都写相同的代码,会让你的代码冗余,为了解决这个问题我们就把相同的代码写在一个文件里,供其它文件使用,这个文件就是一个母版,其它文件对这个母版进行继承,就会显示这个母版的信息

继承初识

1、新建base.html文件,在需要替换的不同位置加上不同名称的block标签

{% block content %}
      模板内容
{% endblock %}

2、在需要继承的文件开头写

{% entends 'base.html' %}

3、接下来改写不同地方的代码

{% block content %}
      模板内容
      ........
      ........
      等等
{% endblock %}

重写时想要保留模板block中的内容

  • 在重写时加上
{{ block.super}}

我们也可以把不同的写在一个通用模板中

使用{{ include 'xxx.html '}}写在需要继承的地方即可

项目实践

我们在项目中把相同的代码抽取出来放在母版中

base.html

  • 我们把不同代码的地方定义一个block块
  • 定义好那些地方需要更改,就定义一个block块
  • 在继承文件中进行操作
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}{% endblock %}</title>
    <link rel="stylesheet" type="text/css" href="{% static 'bootstrap-custom/css/custom-boostrap.css' %}" />
    <link rel="stylesheet" type="text/css" href="{% static 'bootstrap-custom/css/blog.css' %}" />
</head>
<body>
    <header class="navbar navbar-inverse navbar-fixed-top bs-docs-nav" role="banner">
			<div class="container">
				<div class="navbar-header">
					<button class="navbar-toggle" type="button" data-toggle="collapse" data-target=".bs-navbar-collapse">
						<span class="sr-only">响应式导航</span>
						<span class="icon-bar"></span>
						<span class="icon-bar"></span>
						<span class="icon-bar"></span>
					</button>
					<a href="{% url 'article_list' %}" class="navbar-brand">我的小屋</a>
				</div>
				<nav class="collapse navbar-collapse bs-navbar-collapse" role="navigation">
					<ul class="nav navbar-nav">
						<li role="presentation" class="{% url 'article_list' %}"><a href="">首页</a></li>
						<li role="presentation"><a href="{% url 'contact' %}">联系</a></li>
						<li role="presentation"><a href="{% url 'about' %}">关于我</a></li>
					</ul>
					<form class="navbar-form navbar-right" role="search">
						<div class="form-group">
							<input type="text" class="form-control" placeholder="请输入文章标题或者作者名称">
						</div>
						<button type="submit" class="btn btn-default">搜索</button>
					</form>
				</nav>
			</div>
		</header>
    {% block content %}
        <div class="col-md-4">
                <!-- RSS订阅,最新文章(5),分类,标签云,最新评论 -->
                <div class="well text-center">
                    <p class="lead">不想错过好文章,赶紧订阅吧</p>
                    <button type="button" class="btn btn-primary btn-lg">订阅我的博客</button>
                </div>

                <!--最新文章 -->
                <div class="panel panel-primary" id="mypanel">
                    <!-- Default panel contents -->
                    <div class="panel-heading">
                        <h4>最新文章</h4>
                    </div>
                    <!-- List group -->
                    <ul class="list-group">
                        <li class="list-group-item"><a href="">1. 最新文章8月27日</a></li>
                        <li class="list-group-item"><a href="">2. 最新文章8月26日</a></li>
                        <li class="list-group-item"><a href="">3. 最新文章8月25日</a></li>
                        <li class="list-group-item"><a href="">4. 最新文章8月24日</a></li>
                        <li class="list-group-item"><a href="">5. 最新文章8月23日</a></li>
                    </ul>
                </div>

                <!-- 分类目录 -->
                <div class="panel panel-primary">
                    <!-- Default panel contents -->
                    <div class="panel-heading">
                        <h4>分类目录</h4>
                    </div>
                    <!-- List group -->
                    <ul class="list-group">
                        <li class="list-group-item"><a href="">水果</a></li>
                        <li class="list-group-item"><a href="">蔬菜</a></li>
                        <li class="list-group-item"><a href="">电脑3C</a></li>
                        <li class="list-group-item"><a href="">明星八卦</a></li>
                        <li class="list-group-item"><a href="">政治事件</a></li>
                    </ul>
                </div>

                <!-- 标签云 -->
                <div class="panel panel-primary">
                    <!-- Default panel contents -->
                    <div class="panel-heading">
                        <h4>标签云</h4>
                    </div>
                    <!-- List group -->
                    <div class="panel-body">
                        <ul class="list-inline">
                            <li><a href="">子鼠</a></li>
                            <li><a href="">丑牛</a></li>
                            <li><a href="">寅虎</a></li>
                            <li><a href="">卯兔</a></li>
                            <li><a href="">申龙</a></li>
                            <li><a href="">巳蛇</a></li>
                        </ul>
                    </div>
                </div>

                <!-- 最新评论 -->
                <div class="panel panel-primary">
                    <!-- Default panel contents -->
                    <div class="panel-heading">
                        <h4>最新评论</h4>
                    </div>
                    <!-- List group -->
                    <ul class="list-group">
                        <li class="list-group-item"><a href="">1. 最新文章8月27日</a></li>
                        <li class="list-group-item"><a href="">2. 最新文章8月26日</a></li>
                        <li class="list-group-item"><a href="">3. 最新文章8月25日</a></li>
                        <li class="list-group-item"><a href="">4. 最新文章8月24日</a></li>
                        <li class="list-group-item"><a href="">5. 最新文章8月23日</a></li>
                    </ul>
                </div>

            </div>
    {% endblock %}
    <footer>
			<div class="container">
				<hr>
				<p class="text-center">Copyright &copy; Powered by Bruce</p>
			</div>
		</footer>
</body>
    <script src="{% static 'bootstrap-custom/js/jquery-3.5.1.js' %}" type="text/javascript" charset="utf-8"></script>
	<script src="{% static 'bootstrap-custom/js/bootstrap.min.js' %}" type="text/javascript" charset="utf-8"></script>
</html>

首页继承 acticle_list

{% extends 'base.html' %}
{% block title %}
    我的个人网站
{% endblock %}
{% block content %}
    <div id="body" class="container">
			<div class="row">
				<div class="col-md-8">
					<h1>最新发布</h1>
					<!-- 标题,标签,分类,留言总数,发布时间 -->
                    {% for article in articles %}

					<article>

						<h2><a href="{% url 'article_details' article.id %}">{{ article.title }}</a></h2>
						<div class="row">
							<div class="col-md-6 col-sm-6">
								<span class="glyphicon glyphicon-folder-open"></span>&nbsp;&nbsp;<a href="">标签</a>
								&nbsp;&nbsp;<span class="glyphicon glyphicon-tags"></span>&nbsp;&nbsp;<a href="">分类1</a>,<a href="">分类2</a>,<a
								 href="">分类3</a>
							</div>
							<div class="col-md-6 col-sm-6">
								<span class="glyphicon glyphicon-comment"></span>&nbsp;&nbsp;<a href="">200条评论</a>
								&nbsp;&nbsp;<span class="glyphicon glyphicon-time"></span>&nbsp;&nbsp;<a href="">2020年8月27日上午10点03分</a>
							</div>
						</div>
						<hr>

						<img src="http://placekitten.com/900/300" class="img-responsive">
						<br />
						<p class="lead">{{ article.abstract }}</p>
						<p class="text-right"><a href="{% url 'article_details' article.id %}">阅读全文...</a></p>
						<hr>
					</article>
                        {% endfor %}

					<!-- 分页 -->
					<ul class="pager">
						<li class="previous"><a href="#"><span aria-hidden="true">&larr;</span> 上一页</a></li>
						<li class="next"><a href="#">下一页 <span aria-hidden="true">&rarr;</span></a></li>
					</ul>
				</div>
				{{ block.super }}
			</div>
		</div>
{% endblock %}

详情页 acticle_detail.html

{% extends 'base.html' %}
{% block title %}
    详情页
{% endblock %}
{% block content %}
    <div id="body" class="container">
            <div class="row">
                <div class="col-md-8">
                    <!-- 标题,标签,分类,留言总数,发布时间 -->
                    <article>
                        <h2><a href="#">{{ single_article.title }}</a></h2>
                        <div class="row">
                            <div class="col-md-6 col-sm-6">
                                <span class="glyphicon glyphicon-folder-open"></span>&nbsp;&nbsp;<a href="">标签</a>
                                &nbsp;&nbsp;<span class="glyphicon glyphicon-tags"></span>&nbsp;&nbsp;<a href="">分类1</a>,<a href="">分类2</a>,<a href="">分类3</a>
                            </div>
                            <div class="col-md-6 col-sm-6">
                                <span class="glyphicon glyphicon-comment"></span>&nbsp;&nbsp;<a href="">200条评论</a>
                                &nbsp;&nbsp;<span class="glyphicon glyphicon-time"></span>&nbsp;&nbsp;<a href="">2020年8月27日上午10点03分</a>
                            </div>
                        </div>
                        <hr >

                        <img src="http://placekitten.com/900/300" class="img-responsive">
                        <br />
                        {{ single_article.content }}
                        <ul class="pager">
                            <li class="previous"><a href="/"> 返回主页</a></li>
                        </ul>
                        <div class="well">
                            <h4>评论区</h4>
                            <form class="clearfix">
                              <div class="form-group col-md-6">
                                  <label for="username">用户名字</label>
                                  <input type="text" class="form-control" id="username" placeholder="名字">
                              </div>
                              <div class="form-group col-md-6">
                                <label for="exampleInputEmail1">邮箱</label>
                                <input type="email" class="form-control" id="exampleInputEmail1" placeholder="邮箱">
                              </div>
                              <div class="form-group col-md-12">
                                <textarea class="form-control" id="comment" placeholder="评论内容..."></textarea>
                              </div>
                              <div class="form-group text-right">
                                <button type="submit" class="btn btn-primary">提交</button>
                              </div>
                            </form>
                        </div>

                        <hr >
                    </article>
                </div>
                {{ block.super }}
            </div>
</div>
{% endblock %}

联系我 contact.html

{% extends 'base.html' %}
{% block title %}
    联系我
{% endblock %}
{% block content %}
    <div class="container" id="body">
			<h1>联系我</h1>
			<div class="well">
				有问题联系我呀
			</div>
			<form>
				<div class="form-group">
					<label for="username">用户名字</label>
					<input type="text" class="form-control" id="username" placeholder="名字">
				</div>
				<div class="form-group">
					<label for="exampleInputEmail1"> 邮箱</label>
					<input type="email" class="form-control" id="exampleInputEmail1" placeholder="邮箱">
				</div>
				<div class="form-group">
					<label for="subject">主题</label>
					<input type="text" class="form-control" id="subject" placeholder="主题">
				</div>
				<div class="form-group">
					<label for="message">消息内容</label>
				  <textarea class="form-control" id="message" placeholder="评论内容..."></textarea>
				</div>
				<div class="form-group text-right">
					<button type="submit" class="btn btn-primary btn-lg">提交你的消息</button>
				</div>
			</form>
		</div>
{% endblock %}

关于我 about.html

{% extends 'base.html' %}
{% block title %}
    关于我
{% endblock %}
{% block content %}
    <div class="container" id="body">
        <h1>关于我</h1>
        <div class="row" style="margin-bottom: 10px;">
            <div class="col-md-3 col-sm-3">
                <img src="http://placekitten.com/300/350" class="img-thumbnail img-responsive">
            </div>
            <div class="col-md-9 col-sm-9">
                <p>
                    任贤齐,1966年6月23日出生于台湾省彰化县,祖籍湖北省武汉市江夏区,中国台湾流行乐男歌手、演员、赛车手、导演 。
                </p>
                <p>
                    1990年发行音乐合辑《奔向彩虹》,以歌手身份正式出道。1991年首次出演电影《官兵捉强盗》,进入影视圈。1997年因演唱歌曲《心太软》获得广泛关注 [3]  ,并凭借该歌曲荣获香港电台十大劲爆国语金曲铜奖、香港新城精选104电台国语金奖等奖项 [4]  。1998年发行专辑《爱像太平洋》,专辑中的歌曲《对面的女孩看过来》获得HITFM台北之音音乐网100单曲票选活动的第一名,该歌曲也成为了他在歌唱事业上的代表作品;同年出演古装剧《神雕侠侣》饰演杨过。
                </p>
                <p>
                    1999年主演的电影《星愿》上映;同年参加马来西亚越野摩托车比赛中夺得季军 [5]  。2000年发行专辑《为爱走天涯》 [6]  。2001年获得亚洲越野摩托车拉力赛冠军 [7]  。2005年主演的动作片《韩城攻略》在中国和韩国同期上映。2010年凭借电影《火龙对决》获得富川电影节最佳男主角。
                </p>
                <p>
                    2013年出演剧情片《下午茶》,该片入围第63届柏林电影节“电影大观”单元 [8]  。2014年执导的纪录片《妈祖迺台湾》在台湾上映,该片打破台湾纪录片上映戏院数量 [1]  ;同年导演并主演爱情喜剧电影《落跑吧爱情》 [2]  。2016年出演警匪片《树大招风》 [9]  ;同年再次回归小荧幕,出演饮食类电视剧《深夜食堂》 [10]  。2019年主演犯罪动作电影《沉默的证人》。
                </p>
            </div>
        </div>
        <div class="row text-center photo">
            <img  src="http://placekitten.com/200/200" >
            <img  src="http://placekitten.com/200/200" >
        </div>
        <p class="lead text-center">以下是我的视频课资源</p>
        <div class="row">
            <div class="col-md-4">
                <div class="thumbnail">
                    <a href="#">
                        <img src="http://placekitten.com/300/450" class="img-responsive">
                    </a>
                    <div class="caption text-center">
                        <h4>Python基础</h4>
                        <p>课程简介</p>
                        <button type="button" class="btn btn-primary">立即购买</button>
                    </div>
                </div>
            </div>
            <div class="col-md-4">
                <div class="thumbnail">
                    <a href="#">
                        <img src="http://placekitten.com/300/450" class="img-responsive">
                    </a>
                    <div class="caption text-center">
                        <h4>Django实战开发</h4>
                        <p>课程简介</p>
                        <button type="button" class="btn btn-primary">立即购买</button>
                    </div>
                </div>
            </div>
            <div class="col-md-4">
                <div class="thumbnail">
                    <a href="#">
                        <img src="http://placekitten.com/300/450" class="img-responsive">
                    </a>
                    <div class="caption text-center">
                        <h4>Flask实战开发</h4>
                        <p>课程简介</p>
                        <button type="button" class="btn btn-primary">立即购买</button>
                    </div>
                </div>
            </div>
        </div>
    </div>
{% endblock %}

end!

posted @ 2020-12-16 20:09  一文g  阅读(212)  评论(0编辑  收藏  举报