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控制台英汉汉英电子词典
Apr 23 Python
python类和函数中使用静态变量的方法
May 09 Python
python实现文件快照加密保护的方法
Jun 30 Python
python读取二进制mnist实例详解
May 31 Python
浅谈Python由__dict__和dir()引发的一些思考
Oct 30 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
Aug 03 Python
Python I/O与进程的详细讲解
Mar 08 Python
python中单下划线(_)和双下划线(__)的特殊用法
Aug 29 Python
python实现实时视频流播放代码实例
Jan 11 Python
Python进程Multiprocessing模块原理解析
Feb 28 Python
Python通过Tesseract库实现文字识别
Mar 05 Python
深度学习tensorflow基础mnist
Apr 14 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
PHP对象克隆clone用法示例
2016/09/28 PHP
PHP实现的大文件切割与合并功能示例
2018/04/10 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
用js实现计算加载页面所用的时间
2010/04/02 Javascript
关于js注册事件的常用方法
2013/04/03 Javascript
优化Jquery,提升网页加载速度
2013/11/14 Javascript
JavaScript弹出新窗口后向父窗口输出内容的方法
2015/04/06 Javascript
javascript从作用域链谈闭包
2020/07/29 Javascript
jQuery插件 Jqplot图表实例
2016/06/18 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
2016/08/12 Javascript
bootstrap表单示例代码分享
2017/05/18 Javascript
实例分析编写vue组件方法
2019/02/12 Javascript
JavaScript实现的弹出遮罩层特效经典示例【基于jQuery】
2019/07/10 jQuery
在Vue mounted方法中使用data变量详解
2019/11/05 Javascript
JS中的继承操作实例总结
2020/06/06 Javascript
解决Antd Table组件表头不对齐的问题
2020/10/27 Javascript
python实现在无须过多援引的情况下创建字典的方法
2014/09/25 Python
Python中的对象,方法,类,实例,函数用法分析
2015/01/15 Python
Python与R语言的简要对比
2017/11/14 Python
python 列表,数组和矩阵sum的用法及区别介绍
2018/06/28 Python
python多进程实现文件下载传输功能
2018/07/28 Python
python实现简易动态时钟
2018/11/19 Python
浅谈python编译pyc工程--导包问题解决
2019/03/20 Python
解决Djang2.0.1中的reverse导入失败的问题
2019/08/16 Python
Python argparse模块使用方法解析
2020/02/20 Python
Python 如何批量更新已安装的库
2020/05/26 Python
英国手机零售商:Carphone Warehouse
2018/06/06 全球购物
英国派对礼服和连衣裙购物网站:TFNC London
2018/07/07 全球购物
党员公开承诺书范文
2014/03/25 职场文书
九九重阳节标语
2014/10/07 职场文书
机关作风建设整改方案
2014/10/27 职场文书
幼儿园法制宣传日活动总结
2014/11/01 职场文书
先进个人推荐材料
2014/12/29 职场文书
发票退票证明
2015/06/24 职场文书
趣味运动会简讯
2015/07/20 职场文书