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的Flask开发框架简单上手笔记
Nov 16 Python
Python实现pdf文档转txt的方法示例
Jan 19 Python
python使用matplotlib库生成随机漫步图
Aug 27 Python
对Python3中dict.keys()转换成list类型的方法详解
Feb 03 Python
命令行运行Python脚本时传入参数的三种方式详解
Oct 11 Python
python基于TCP实现的文件下载器功能案例
Dec 10 Python
Pytorch 之修改Tensor部分值方式
Dec 27 Python
通过python 执行 nohup 不生效的解决
Apr 16 Python
python针对Oracle常见查询操作实例分析
Apr 30 Python
浅谈Python中的模块
Jun 10 Python
PyCharm中配置PySide2的图文教程
Jun 18 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
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
php约瑟夫问题解决关于处死犯人的算法
2015/03/23 PHP
Prototype 学习 Prototype对象
2009/07/12 Javascript
jquery创建表格(自动增加表格)代码分享
2013/12/25 Javascript
JavaScript的各种常见函数定义方法
2014/09/16 Javascript
nodejs开发环境配置与使用
2014/11/17 NodeJs
jQuery Real Person验证码插件防止表单自动提交
2015/11/06 Javascript
Angular中$cacheFactory的作用和用法实例详解
2016/08/19 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
2016/12/28 Javascript
vue 中自定义指令改变data中的值
2017/06/02 Javascript
jQuery常见的遍历DOM操作详解
2018/09/05 jQuery
浅谈高大上的微信小程序中渲染html内容—技术分享
2018/10/25 Javascript
小程序实现搜索框
2020/06/19 Javascript
es6函数中的作用域实例分析
2020/04/18 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
[49:21]TNC vs VG 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第三场 8.20.mp4
2019/08/22 DOTA
python实现在控制台输入密码不显示的方法
2015/07/02 Python
利用python程序生成word和PDF文档的方法
2017/02/14 Python
Python使用matplotlib实现绘制自定义图形功能示例
2018/01/18 Python
Python代码打开本地.mp4格式文件的方法
2019/01/03 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
2020/01/10 Python
python不使用for计算两组、多个矩形两两间的iou方式
2020/01/18 Python
浅谈numpy中np.array()与np.asarray的区别以及.tolist
2020/06/03 Python
Python中zipfile压缩文件模块的基本使用教程
2020/06/14 Python
python virtualenv虚拟环境配置与使用教程详解
2020/07/13 Python
matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域
2021/01/05 Python
基于zepto的插件之移动端无缝向上滚动并上下触摸滑动实例代码
2016/12/20 HTML / CSS
采购部岗位职责
2013/11/24 职场文书
运动会广播稿80字
2014/01/23 职场文书
教师通用专业自荐书范文
2014/02/11 职场文书
推荐信格式范文
2014/05/09 职场文书
2015年暑期社会实践活动总结
2015/03/27 职场文书
情侣之间的道歉短信
2015/05/12 职场文书
OpenCV项目实践之停车场车位实时检测
2022/04/11 Python
Android移动应用开发指南之六种布局详解
2022/09/23 Java/Android