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实现遍历windows所有窗口并输出窗口标题的方法
Mar 13 Python
Python的Django框架中的表单处理示例
Jul 17 Python
python2 与python3的print区别小结
Jan 16 Python
Flask框架Jinjia模板常用语法总结
Jul 19 Python
给大家整理了19个pythonic的编程习惯(小结)
Sep 25 Python
Django中的AutoField字段使用
May 18 Python
最简单的matplotlib安装教程(小白)
Jul 28 Python
Windows下Sqlmap环境安装教程详解
Aug 04 Python
python3.5的包存放的具体路径
Aug 16 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
Jan 29 Python
Python趣味挑战之用pygame实现简单的金币旋转效果
May 31 Python
Python制作动态字符画的源码
Aug 04 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
IIS7.X配置PHP运行环境小结
2011/06/09 PHP
PHP中isset()和unset()函数的用法小结
2014/03/11 PHP
php微信公众开发之获取周边酒店信息的方法
2014/12/22 PHP
php比较两个字符串长度的方法
2015/07/13 PHP
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
2016/03/07 PHP
Yii2实现上下联动下拉框功能的方法
2016/08/10 PHP
php is_executable判断给定文件名是否可执行实例
2016/09/26 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
Yii 框架入口脚本示例分析
2020/05/19 PHP
textarea的value是html文件源代码,存成html文件的代码
2007/04/20 Javascript
IE8 中使用加速器(Activities)
2010/05/14 Javascript
js定时器(执行一次、重复执行)
2014/03/07 Javascript
Javascript设计模式之观察者模式的多个实现版本实例
2015/03/03 Javascript
javascript图片预加载完整实例
2015/12/10 Javascript
基于Bootstrap的网页设计实例
2017/03/01 Javascript
JS简单判断字符在另一个字符串中出现次数的2种常用方法
2017/04/20 Javascript
JS中利用swiper实现3d翻转幻灯片实例代码
2017/08/25 Javascript
如何去除vue项目中的#及其ie9兼容性
2018/01/11 Javascript
ES6知识点整理之模块化的应用详解
2019/04/15 Javascript
解决vue-cli 打包后自定义动画未执行的问题
2019/11/12 Javascript
原生js拖拽实现图形伸缩效果
2020/02/10 Javascript
JS操作JSON常用方法(10w阅读)
2020/12/06 Javascript
Python中http请求方法库汇总
2016/01/06 Python
Python实现遍历目录的方法【测试可用】
2017/03/22 Python
Ubuntu下Anaconda和Pycharm配置方法详解
2019/06/14 Python
python 机器学习之支持向量机非线性回归SVR模型
2019/06/26 Python
django的模型类管理器——数据库操作的封装详解
2020/04/01 Python
python中判断文件结束符的具体方法
2020/08/04 Python
Python logging模块handlers用法详解
2020/08/14 Python
Python 如何实现数据库表结构同步
2020/09/29 Python
美国在线宠物用品商店:Entirely Pets
2017/01/01 全球购物
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
What's the difference between Debug and Trace class? (Debug类与Trace类有什么区别)
2013/09/10 面试题
服装设计专业求职信
2014/06/16 职场文书
房屋质量投诉书
2015/07/02 职场文书
《去年的树》教学反思
2016/02/18 职场文书