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之import机制详解
Jul 03 Python
Google开源的Python格式化工具YAPF的安装和使用教程
May 31 Python
Python如何为图片添加水印
Nov 25 Python
Python书单 不将就
Jul 11 Python
python实现读取excel写入mysql的小工具详解
Nov 20 Python
你真的了解Python的random模块吗?
Dec 12 Python
基于python进行桶排序与基数排序的总结
May 29 Python
Python数据集切分实例
Dec 08 Python
正则给header的冒号两边参数添加单引号(Python请求用)
Aug 09 Python
Python学习笔记之Zip和Enumerate用法实例分析
Aug 14 Python
Python调用OpenCV实现图像平滑代码实例
Jun 19 Python
用opencv给图片换背景色的示例代码
Jul 08 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 is_file()和is_dir()用于遍历目录时用法注意事项
2010/03/02 PHP
php调用mysql存储过程实例分析
2014/12/29 PHP
基于PHPexecl类生成复杂的报表表头示例
2016/10/14 PHP
php基于 swoole 实现的异步处理任务功能示例
2019/08/13 PHP
asp javascript 实现关闭窗口时保存数据的办法
2007/11/24 Javascript
jquery用get实现ajax在ie里面刷新不进入后台解决方法
2013/08/12 Javascript
IE8 内存泄露(内存一直增长 )的原因及解决办法
2016/04/06 Javascript
JS+CSS3模拟溢出滚动效果
2016/08/12 Javascript
JS日程管理插件FullCalendar中文说明文档
2017/02/06 Javascript
vue.js从安装到搭建过程详解
2017/03/17 Javascript
原生JS实现不断变化的标签
2017/05/22 Javascript
完美实现js拖拽效果 return false用法详解
2017/07/28 Javascript
详解nodejs通过响应回写的方式渲染页面资源
2018/04/07 NodeJs
js实现点击按钮复制文本功能
2020/07/20 Javascript
node.JS的crypto加密模块使用方法详解(MD5,AES,Hmac,Diffie-Hellman加密)
2020/02/06 Javascript
nuxt 每个页面head标签内容设置方式
2020/11/05 Javascript
Vue——前端生成二维码的示例
2020/12/19 Vue.js
node中短信api实现验证码登录的示例代码
2021/01/20 Javascript
vue 项目@change多个参数传值多个事件的操作
2021/01/29 Vue.js
python re正则表达式模块(Regular Expression)
2014/07/16 Python
利用Python获取操作系统信息实例
2016/09/02 Python
一个基于flask的web应用诞生 使用模板引擎和表单插件(2)
2017/04/11 Python
利用python求解物理学中的双弹簧质能系统详解
2017/09/29 Python
pyqt 多窗口之间的相互调用方法
2019/06/19 Python
Python及Pycharm安装方法图文教程
2019/08/05 Python
Python hashlib模块加密过程解析
2019/11/05 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
2020/06/04 Python
python 用opencv实现霍夫线变换
2020/11/27 Python
世界上最大的字体市场:MyFonts
2020/01/10 全球购物
学校食堂采购员岗位职责
2013/12/05 职场文书
汽车维修工岗位职责
2014/02/12 职场文书
职务任命书范本
2014/06/05 职场文书
中班下学期个人总结
2015/02/12 职场文书
公司更名通知函
2015/04/24 职场文书
单位领导婚礼致辞
2015/07/28 职场文书
班委竞选稿范文
2015/11/21 职场文书