Django模板继承与模板的导入实例详解

目录
  • 一:模版的继承
    • 1.什么是模板继承?
    • 2.使用继承流程原理
    • 3.模板继承语法
  • 二:模板的继承使用
    • 1.案例需求
    • 2.总结模板继承
  • 三:模版的导入
    • 1.模板导入
    • 2.模板导入格式
    • 3.模板导入使用
    • 4.使用结果
  • 总结

一:模版的继承

1.什么是模板继承?

你需要事先在你想要使用的主页面上划定区域做好标记,之后在子页面继承的时候你就可以使用在主页面划定的区域,也就意味着,如果你不划定任何区域,那么你子页面将无法修改主页面内容

2.使用继承流程原理

1.先在你想要继承的主页面上通过bolck划定你将来可能要改的区域,并做好标记

2.在子页面上继承extends,利用block自动提示选取你想要修改的内容区域标记名称

3.在子页面extends中写你要修改主页面标记区的代码

4.然后就可以让子页面的修改内容渲染到主页面的划定区域上

你们有没有见过一些网站

这些网站页面整体都大差不差 只是某一些局部在做变化

3.模板继承语法

1.继承
{% extends '模版页面名' %}

2.局部修改
	# 1.你需要先去模版页面中划定可以被修改的区域
  	{% block '名字' %}
    	模版内容(666)
    {% endblock %}
  # 2.子页面中即成了模版页面之后 就可以根据名字修改
  	{% block '名字' %}
    	子版内容

      子版页面吃了可以自己写自己的之外 还可以继续使用模版的内容
      {{ block.super }}  666
      {{ block.super }}  666
      {{ block.super }}  666
      {{ block.super }}  666
    {% endblock %}
4.一般情况下模版页面上应该至少有三块可以被修改的区域
  1.css区域
  2.html区域
  3.js区域

每一个子页面就都可以有自己独有的css代码 html代码 js代码
互相之间 互不干扰
# 子页面css
{% block css %}

{% endblock %}

{% block content %}

{% endblock %}

# 子页面js
{% block js %}

{% endblock %}

二:模板的继承使用

1.案例需求

1.实现用户点击登录右侧局部出现登录页面,点击注册右侧出现注册页面

urls.py

    # 模板的继承
    url(r'^home/', views.home),
    # 创建login路由
    url(r'^login/', views.login),
    # 创建reg路由
    url(r'^reg/', views.reg),

views.py

def home(request):
    return render(request, 'home.html')

def login(request):
    return render(request, 'login.html')

def reg(request):
    return render(request, 'reg.html')

home.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--bootstrap引入 CSS CDN-->
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
    <!--jQuery引入 CDN-->
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <!--Bootstrap引入 Js CDN-->
    <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
{% block css %}

{% endblock %}
</head>
<body>
{#导航条#}
<nav class="navbar navbar-inverse">
  <div class="container-fluid">
    <!-- Brand and toggle get grouped for better mobile display -->
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="#">Brand</a>
    </div>

    <!-- Collect the nav links, forms, and other content for toggling -->
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
      <ul class="nav navbar-nav">
        <li class="active"><a href="#">Link <span class="sr-only">(current)</span></a></li>
        <li><a href="#">Link</a></li>
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">One more separated link</a></li>
          </ul>
        </li>
      </ul>
      <form class="navbar-form navbar-left">
        <div class="form-group">
          <input type="text" class="form-control" placeholder="Search">
        </div>
        <button type="submit" class="btn btn-default">Submit</button>
      </form>
      <ul class="nav navbar-nav navbar-right">
        <li><a href="#">Link</a></li>
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a></li>
          </ul>
        </li>
      </ul>
    </div><!-- /.navbar-collapse -->
  </div><!-- /.container-fluid -->
</nav>
{#左右不留白#}
<div class="container-fluid">
{#row 划分12份区域#}
    <div class="row">
{#        左侧分三份#}
        <div class="col-md-3">
{#侧边栏  #}
            <div class="list-group">
              <a href="/home/" class="list-group-item active">
                首页
              </a>
              <a href="/login/" class="list-group-item">登录</a>
              <a href="/reg/" class="list-group-item">注册</a>
            </div>
        </div>
        <div class="col-md-9">
{#            面板#}
            <div class="panel panel-primary">
          <div class="panel-heading">
            <h3 class="panel-title">Panel title</h3>
          </div>
          <div class="panel-body">
{#          划分区域 不影响区域展示,仅仅是标记  区域名#}
              {% block content %}
                  {#              巨幕#}
                 <div class="jumbotron">
                  <h1>Hello, world!</h1>
                  <p>...</p>
                  <p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more</a></p>
                </div>
              {% endblock %}

          </div>
        </div>
        </div>
    </div>

</div>
{% block js %}

{% endblock %}
</body>
</html>

login.html

{#login 页面全部清空#}

{#login继承home主页面#}
{% extends 'home.html' %}

{#子页面的css代码 #}
{% block css %}
    <style>
        h1 {
            color: red;
        }
    </style>
{% endblock %}

{#block 指定选择主页面划分的(区域) 可以进行修改 #}
{% block content %}
    <h1 class="text-center">登录页面</h1>
    <form action="">
        <p>username: <input type="text" class="form-control"></p>
        <p>password: <input type="text" class="form-control"></p>
        <input type="submit" class="btn btn-success">
    </form>
{% endblock %}

{# 子页面的js代码 #}
{% block js %}
    <script>
        alert('登录页面')
    </script>
{% endblock %}

reg.html

{#reg页面全部清空#}

{#reg继承home主页面#}
{% extends 'home.html' %}

{#子页面的css代码 #}
{% block css %}
    <style>
        h1 {
            color: seagreen;
        }
    </style>
{% endblock %}

{#block 指定选择主页面划分的(区域) 可以进行修改 #}
{% block content %}
    <h1 class="text-center">注册页面</h1>
    <form action="">
        <p>username: <input type="text" class="form-control"></p>
        <p>password: <input type="text" class="form-control"></p>
        <input type="submit" class="btn btn-danger">
    </form>
{% endblock %}

{# 子页面的js代码 #}
{% block js %}
    <script>
        alert('注册')
    </script>
{% endblock %}

2.总结模板继承

一般情况下 模版的页面上划定的区域越多 那么该模版的扩展性就越高
但是如果太多 那还不如自己直接写

三:模版的导入

1.模板导入

将页面的某一个局部当成模块的形式
哪个地方需要就可以直接导入使用即可

2.模板导入格式

{% include '导入html文件名' %}

3.模板导入使用

sss.html

<h1>我是sss.html页面</h1>

login.html子页面

{% endblock %}

{#block 指定选择主页面划分的(区域) 可以进行修改 #}
{% block content %}
    <h1 class="text-center">登录页面</h1>
    <form action="">
        <p>username: <input type="text" class="form-control"></p>
        <p>password: <input type="text" class="form-control"></p>
        <input type="submit" class="btn btn-success">
    </form>

<p>模板的导入</p>
{% include 'sss.html' %}

{% endblock %}

4.使用结果

总结

到此这篇关于Django模板继承与模板导入的文章就介绍到这了,更多相关Django模板继承与模板导入内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)

    Django项目中模板标签及模板的继承与引用 常见模板标签 {% static %} {% for x in range(x) %}{% endfor %} 循环的序号{% forloop %} 循环的序号反向排列,从1开始计算,从0开始计算在后面加上0{% forloop.revcounter0 %} {% if condition1 %}sentence1{% else condition2 %}sentence2{% endif %} 模板标签url反向解析 视图函数 def studen

  • Django框架下静态模板的继承操作示例

    本文实例讲述了Django框架下静态模板的继承操作.分享给大家供大家参考,具体如下: 前言:第一篇博客,毕业校招在即,抽空把做过的项目都整理一下. 开发环境:python3.4,django1.8 初入python和django做项目,遇到很多前端页面代码冗余的情况,特别是头部和脚部,代码都是一样的.最开始是代码一直复制粘贴,后来发现Django自带的模板继承很好用.本人新手,仅发表个人经验,确实觉得很受用.欢迎大家指导. ①. 定义一个基础模板,该框架之后由子模板继承. 命名为base.htm

  • Python Django框架介绍之模板标签及模板的继承

    一.标签语法 由%}和 {% 来定义的,例如:{%tag%} {%endtag%},完整的标签有开始就有结束,如条件语句,有条件判断的开始,也对应有条件的结束. 二.常见标签 if条件判断 if/elif/else:可以使用and/or/in/not/==/!=/<=/>=,来进行判断.ifequal/ifnotequal for循环 for ... in ...:和python中的用法一样. forloop.counter:当前迭代的次数,下标从1开始.1,2,3.... forloop.c

  • Django模板继承 extend标签实例代码详解

    在 views.py 上修改 ... def ordered(req): return render(req, "ordered.html") def shopping_car(req): return render(req, "shopping_car.html") 在 urls.py 上修改 ... path('ordered/', views.ordered), path('shopping_car/', views.shopping_car), ... 在

  • Django模板过滤器和继承示例详解

    目录 模板过滤器 模板的继承 模板继承样例 总结 模板过滤器 定义:在变量输出时对变量的值进行处理 作用:可以通过使用过滤器来改变变量的输出显示 语法:{{变量 | 过滤器:'参数值1' | 过滤器2:'参数值2' ...}} 常用的过滤器 过滤器 说明 lower 将字符串全部转换为小写 upper 将字符串全部转换为大写 safe 默认不对变量内的字符串进行 html 转义 add:"n" 将calue值增加n truncatechars:'n' 如果字符多于指定的字符数量,那么会

  • 对Django中内置的User模型实例详解

    User模型 User模型是这个框架的核心部分.他的完整的路径是在django.contrib.auth.models.User. 字段 内置的User模型拥有以下的字段: 1.username: 用户名.150个字符以内.可以包含数字和英文字符,以及_.@.+..和-字符.不能为空,且必须唯一! 2.first_name:歪果仁的first_name,在30个字符以内.可以为空. 3.last_name:歪果仁的last_name,在150个字符以内.可以为空. 4.email:邮箱.可以为空

  • Python Django给admin添加Action的方法实例详解

    在使用Django自带的admin后台的时候,他提供了一些默认的指令可以对数据进行操作, 比如批量删除,修改等 同样的我们也可以添加自己的指令. 创建一个Django项目 $ django-admin startproject DjangoActions $ cd DjangoActions $ python3 manage.py startapp mysite添加model 打开mysite下的models.py from django.db import models class Artic

  • Django模板继承与模板的导入实例详解

    目录 一:模版的继承 1.什么是模板继承? 2.使用继承流程原理 3.模板继承语法 二:模板的继承使用 1.案例需求 2.总结模板继承 三:模版的导入 1.模板导入 2.模板导入格式 3.模板导入使用 4.使用结果 总结 一:模版的继承 1.什么是模板继承? 你需要事先在你想要使用的主页面上划定区域做好标记,之后在子页面继承的时候你就可以使用在主页面划定的区域,也就意味着,如果你不划定任何区域,那么你子页面将无法修改主页面内容 2.使用继承流程原理 1.先在你想要继承的主页面上通过bolck划定

  • ThinkPHP模板循环输出Volist标签用法实例详解

    本文实例讲述了ThinkPHP模板循环输出Volist标签用法.分享给大家供大家参考,具体如下: volist 标签用于在模板中循环输出数据集或者多维数组. volist 标签 在模块操作中,select() 方法返回的是一个二维数组,可以用 volist 直接输出: <volist name="list" id="vo"> 用 户 名:{$vo['username']}<br /> 电子邮件:{$vo['email']}<br /&g

  • Python django框架 web端视频加密的实例详解

    视频加密流程图: 后端获取保利威的视频播放授权token,提供接口api给前端 参考文档:http://dev.polyv.net/2019/videoproduct/v-api/v-api-play/create-playsafe-token/ 在utils下创建polyv.py,编写token生成工具函数,path:utils/polyv.py utils 是多个模块的公共函数库的文件夹里面存放自己开发的组件 from django.conf import settings import t

  • Django视图层与模板层实例详解

    目录 theme: channing-cyan 网页伪静态 视图层 1.视图函数的返回值问题 2.视图函数返回json格式数据 3.form表单携带文件数据 4.FBV与CBV 5.CBV源码分析 模板层 1.模板语法传值 2.模板语法传值的范围 3.模板语法值过滤器 4.模板语法标签(类似于python中的流程控制) 5.自定义标签函数.过滤器.inclusion_tag 6.模板的继承 7.模板的导入 theme: channing-cyan 网页伪静态 将动态网页伪装成静态网页,可以提升网

  • 微信小程序视图template模板引用的实例详解

    微信小程序视图template模板引用的实例详解 WXML 提供两种文件引用方式import和include. include可以将目标文件除了的整个代码引入,相当于是拷贝到include位置 temlate.wxml <template name="tmp_data" > <view class="content"> <!-- 头像 --> <view class="author-date"> &

  • Android开发之Android.mk模板的实例详解

    Android开发之Android.mk模板的实例详解 关于Android NDK开发的文章已经比较多了,我的博客中也分享了很多NDK开发相关经验和技巧,今天简单写了一个 Android.mk 的示例模板,供初学者参考. 本模板主要给大家示例 Android NDK 开发中的如下几个问题: 1. 如何自动添加需要编译的源文件列表   2. 如何添加第三方静态库.动态库的依赖   3. 如何构造一个完整的NDK工程框架 假设我们的项目依赖 libmath.a, libjson.a, libffmp

  • django 使用全局搜索功能的实例详解

    安装需要的包 1 第一步: 全文检索不同于特定字段的模糊查询,使用全文检索的效率更高,并且能够对于中文进行分词处理. haystack:全文检索的框架,支持whoosh.solr.Xapian.Elasticsearc四种全文检索引擎 whoosh:纯Python编写的全文搜索引擎对于小型的站点,whoosh已经足够使用 jieba:一款免费的中文分词包 1)在虚拟环境中依次安装需要的包. pip install django-haystack pip install whoosh pip in

  • Django实现web端tailf日志文件功能及实例详解

    这是Django Channels系列文章的第二篇,以web端实现tailf的案例讲解Channels的具体使用以及跟Celery的结合 通过上一篇 <Django使用Channels实现WebSocket--上篇> 的学习应该对Channels的各种概念有了清晰的认知,可以顺利的将Channels框架集成到自己的Django项目中实现WebSocket了,本篇文章将以一个Channels+Celery实现web端tailf功能的例子更加深入的介绍Channels 先说下我们要实现的目标:所有

随机推荐