django模板结构优化的方法


Posted in Python onFebruary 28, 2019

模版结构优化

引入模版

有时候一些代码是在许多模版中都用到的。如果我们每次都重复的去拷贝代码那肯定不符合项目的规范。一般我们可以把这些重复性的代码抽取出来,就类似于Python中的函数一样,以后想要使用这些代码的时候,就通过 include 包含进来。这个标签就是 include 。示例代码如下:

# header.html
<p>我是header</p>

# footer.html
<p>我是footer</p>

# main.html
{% include 'header.html' %}
<p>我是main内容</p>
{% include 'footer.html' %}

include 标签寻找路径的方式。也是跟 render 渲染模板的函数是一样的。

默认 include 标签包含模版,会自动的使用主模版中的上下文,也即可以自动的使用主模版中的变量。如果想传入一些其他的参数,那么可以使用 with 语句。示例代码如下:

# header.html
<p>用户名:{{ username }}</p>

# main.html
{% include "header.html" with username='huangyong' %}

模板继承:

在前端页面开发中。有些代码是需要重复使用的。这种情况可以使用 include 标签来实现。也可以使用另外一个比较强大的方式来实现,那就是模版继承。模版继承类似于 Python 中的类,在父类中可以先定义好一些变量和方法,然后在子类中实现。模版继承也可以在父模版中先定义好一些子模版需要用到的代码,然后子模版直接继承就可以了。并且因为子模版肯定有自己的不同代码,因此可以在父模版中定义一个block接口,然后子模版再去实现。以下是父模版的代码:

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
  <link rel="stylesheet" href="{% static 'style.css' %}" rel="external nofollow" />
  <title>{% block title %}我的站点{% endblock %}</title>
</head>

<body>
  <div id="sidebar">
    {% block sidebar %}
    <ul>
      <li><a href="/" rel="external nofollow" >首页</a></li>
      <li><a href="/blog/" rel="external nofollow" >博客</a></li>
    </ul>
    {% endblock %}
  </div>
  <div id="content">
    {% block content %}{% endblock %}
  </div>
</body>
</html>

这个模版,我们取名叫做 base.html ,定义好一个简单的 html 骨架,然后定义好两个 block 接口,让子模版来根据具体需求来实现。子模板然后通过 extends 标签来实现,示例代码如下:

{% extends "base.html" %}

{% block title %}博客列表{% endblock %}

{% block content %}
  {% for entry in blog_entries %}
    <h2>{{ entry.title }}</h2>
    <p>{{ entry.body }}</p>
  {% endfor %}
{% endblock %}

需要注意的是:extends标签必须放在模版的第一行。

子模板中的代码必须放在block中,否则将不会被渲染。

如果在某个 block 中需要使用父模版的内容,那么可以使用 {{block.super}} 来继承。比如上例, {%block title%} ,如果想要使用父模版的 title ,那么可以在子模版的 title block 中使用 {{ block.super }} 来实现。

在定义 block 的时候,除了在 block 开始的地方定义这个 block 的名字,还可以在 block 结束的时候定义名字。比如 {% block title %}{% endblock title %} 。这在大型模版中显得尤其有用,能让你快速的看到 block 包含在哪里。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
跟老齐学Python之做一个小游戏
Sep 28 Python
详解在Python程序中解析并修改XML内容的方法
Nov 16 Python
Python使用BeautifulSoup库解析HTML基本使用教程
Mar 31 Python
python读取一个目录下所有txt里面的内容方法
Jun 23 Python
python 美化输出信息的实例
Oct 15 Python
python存储16bit和32bit图像的实例
Dec 05 Python
Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str
Aug 07 Python
Python3操作Excel文件(读写)的简单实例
Sep 02 Python
Django 自动生成api接口文档教程
Nov 19 Python
python数据预处理 :数据共线性处理详解
Feb 24 Python
150行Python代码实现带界面的数独游戏
Apr 04 Python
Python map及filter函数使用方法解析
Aug 06 Python
详解python做UI界面的方法
Feb 27 #Python
总结python中pass的作用
Feb 27 #Python
Python递归函数实例讲解
Feb 27 #Python
PyQt打开保存对话框的方法和使用详解
Feb 27 #Python
python中嵌套函数的实操步骤
Feb 27 #Python
python把1变成01的步骤总结
Feb 27 #Python
PyQt弹出式对话框的常用方法及标准按钮类型
Feb 27 #Python
You might like
77A一级收信机修理记
2021/03/02 无线电
php查询mysql数据库并将结果保存到数组的方法
2015/03/18 PHP
动态加载iframe
2006/06/16 Javascript
用javascript连接access数据库的方法
2006/11/17 Javascript
asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)
2012/03/14 Javascript
javascript重写alert方法的实例代码
2013/03/29 Javascript
js实现仿百度瀑布流的方法
2015/02/05 Javascript
JavaScript获取网页表单action属性的方法
2015/04/02 Javascript
node.js 使用ejs模板引擎时后缀换成.html
2015/04/22 Javascript
JS模拟键盘打字效果的方法
2015/08/05 Javascript
JS实现支持多选的遍历下拉列表代码
2015/08/20 Javascript
js 中rewrap-ajax.js插件实例代码
2017/10/20 Javascript
微信小程序wx:for和wx:for-item的用法详解
2018/04/01 Javascript
Angular4.x通过路由守卫进行路由重定向实现根据条件跳转到相应的页面(推荐)
2018/05/10 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
2019/03/26 Javascript
基于layui table返回的值的多级嵌套的解决方法
2019/09/19 Javascript
vue中keep-alive内置组件缓存的实例代码
2020/04/16 Javascript
vue中使用腾讯云Im的示例
2020/10/23 Javascript
vue实现轮播图帧率播放
2021/01/26 Vue.js
Python协程的用法和例子详解
2017/09/09 Python
python环形单链表的约瑟夫问题详解
2018/09/27 Python
Python imread、newaxis用法详解
2019/11/04 Python
Python-openCV读RGB通道图实例
2020/01/17 Python
解决Tensorflow占用GPU显存问题
2020/02/03 Python
python 批量下载bilibili视频的gui程序
2020/11/20 Python
利用CSS3实现折角效果实例源码
2016/09/28 HTML / CSS
法国二手MacBook销售网站:Okamac
2019/03/18 全球购物
FC-Moto丹麦:欧洲最大的摩托车服装和头盔商店之一
2019/08/20 全球购物
巴西24小时在线药房:Drogasil
2020/06/20 全球购物
木马的传播途径主要有哪些
2016/04/08 面试题
警察思想汇报
2014/01/04 职场文书
大学毕业自我评价
2014/02/02 职场文书
教师三严三实对照检查材料
2014/09/25 职场文书
商铺门面租房协议书
2014/10/21 职场文书
因工资原因离职的辞职信范文
2015/05/12 职场文书
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android