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字符串连接方式汇总
Aug 21 Python
零基础写python爬虫之爬虫框架Scrapy安装配置
Nov 06 Python
python中Flask框架简单入门实例
Mar 21 Python
python比较两个列表是否相等的方法
Jul 28 Python
Python File readlines() 使用方法
Mar 19 Python
Python常见排序操作示例【字典、列表、指定元素等】
Aug 15 Python
Python之循环结构
Jan 15 Python
python+selenium 定位到元素,无法点击的解决方法
Jan 30 Python
python 经典数字滤波实例
Dec 16 Python
Python实现中值滤波去噪方式
Dec 18 Python
在ipython notebook中使用argparse方式
Apr 20 Python
教你使用Python pypinyin库实现汉字转拼音
May 27 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
windows下配置apache+php+mysql时出现问题的处理方法
2014/06/20 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
2014/09/23 PHP
php中实现用数组妩媚地生成要执行的sql语句
2015/07/10 PHP
PHP如何将XML转成数组
2016/04/04 PHP
PHP使用redis位图bitMap 实现签到功能
2019/10/08 PHP
解决FireFox下[使用event很麻烦]的问题
2006/11/26 Javascript
使用jquery Ajax实现上传附件功能
2018/10/23 jQuery
vue2中引用及使用 better-scroll的方法详解
2018/11/15 Javascript
详解Vue中使用插槽(slot)、聚类插槽
2019/04/12 Javascript
微信小程序实现商城倒计时
2020/11/01 Javascript
详解Vue template 如何支持多个根结点
2020/02/10 Javascript
解决Echarts2竖直datazoom滑动后显示数据不全的问题
2020/07/20 Javascript
javascript canvas实现简易时钟例子
2020/09/05 Javascript
[43:32]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
Python中取整的几种方法小结
2017/01/06 Python
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
2018/07/02 Python
python+Splinter实现12306抢票功能
2018/09/25 Python
pygame游戏之旅 按钮上添加文字的方法
2018/11/21 Python
python使用SQLAlchemy操作MySQL
2020/01/02 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
调整Jupyter notebook的启动目录操作
2020/04/10 Python
Python接口自动化测试框架运行原理及流程
2020/11/30 Python
用OpenCV进行年龄和性别检测的实现示例
2021/01/29 Python
matplotlib部件之套索Lasso的使用
2021/02/24 Python
JoJo Maman Bébé爱尔兰官网:英国最受欢迎的精品母婴品牌
2020/12/20 全球购物
Claire’s法国:时尚配饰、美容、珠宝、头发
2021/01/16 全球购物
软件配置管理有什么好处
2015/04/15 面试题
内部类的定义、种类以及优点
2013/10/16 面试题
学校四群教育实施方案
2014/06/12 职场文书
2014年接待工作总结
2014/11/26 职场文书
综合素质评价个性与发展自我评价
2015/03/06 职场文书
内勤岗位职责范本
2015/04/13 职场文书
七年级生物教学反思
2016/02/20 职场文书
redis 限制内存使用大小的实现
2021/05/08 Redis
SQL Server 忘记密码以及重新添加新账号
2022/04/26 SQL Server
阿里云 Windows server 2019 配置FTP
2022/04/28 Servers