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的id()函数介绍
Feb 10 Python
Python使用minidom读写xml的方法
Jun 03 Python
Python抓取百度查询结果的方法
Jul 08 Python
Anaconda下安装mysql-python的包实例
Jun 11 Python
Python向excel中写入数据的方法
May 05 Python
python 实现12bit灰度图像映射到8bit显示的方法
Jul 08 Python
Numpy的简单用法小结
Aug 28 Python
Django restframework 框架认证、权限、限流用法示例
Dec 21 Python
Python实现AI换脸功能
Apr 10 Python
为什么相对PHP黑python的更少
Jun 21 Python
Python为何不支持switch语句原理详解
Oct 21 Python
python双向链表实例详解
May 25 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
咖啡知识 除了喝咖啡还有那些知识点
2021/03/06 新手入门
功能齐全的PHP发送邮件类代码附详细说明
2008/07/10 PHP
php产生随机数的两种方法实例代码 输出随机IP
2011/04/08 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
2014/06/21 PHP
改写ThinkPHP的U方法使其路由下分页正常
2014/07/02 PHP
PHP之sprintf函数用法详解
2014/11/12 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
2014/12/16 PHP
PHP的swoole扩展安装方法详细教程
2016/05/18 PHP
PHP简单实现合并2个数字键数组值的方法
2017/05/30 PHP
浅析PHP7 的垃圾回收机制
2019/09/06 PHP
使用laravel的migrate创建数据表的方法
2019/09/30 PHP
基于jquery实现一张图片点击鼠标放大再点缩小
2013/09/29 Javascript
JS Date函数整理方便使用
2013/10/23 Javascript
EasyUi combotree 实现动态加载树节点
2016/04/01 Javascript
实例解析jQuery工具函数
2016/12/01 Javascript
js实现简易垂直滚动条
2017/02/22 Javascript
基于vue2.0实现的级联选择器
2017/06/09 Javascript
深入研究React中setState源码
2017/11/17 Javascript
使用JavaScript生成罗马字符的实例代码
2018/06/08 Javascript
一篇文章,教你学会Vue CLI 插件开发
2019/04/17 Javascript
vue+Element实现搜索关键字高亮功能
2019/05/28 Javascript
python数据封装json格式数据
2018/03/04 Python
python实现dijkstra最短路由算法
2019/01/17 Python
dataframe 按条件替换某一列中的值方法
2019/01/29 Python
python把1变成01的步骤总结
2019/02/27 Python
解决python多行注释引发缩进错误的问题
2019/08/23 Python
python 解决cv2绘制中文乱码问题
2019/12/23 Python
利用Python脚本批量生成SQL语句
2020/03/04 Python
C++:memset ,memcpy和strcpy的根本区别
2013/04/27 面试题
标准化管理实施方案
2014/02/25 职场文书
喷漆工的岗位职责
2014/03/17 职场文书
C++程序员求职信
2014/05/07 职场文书
学校百日安全生产活动总结
2014/07/05 职场文书
少先队辅导员事迹材料
2014/12/24 职场文书
考试没考好检讨书
2015/05/06 职场文书
2015年客房服务员工作总结
2015/05/15 职场文书