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 30 Python
Python读写zip压缩文件的方法
Aug 29 Python
python实现单链表中删除倒数第K个节点的方法
Sep 28 Python
python实现QQ批量登录功能
Jun 19 Python
python+tifffile之tiff文件读写方式
Jan 13 Python
解决TensorFlow模型恢复报错的问题
Feb 06 Python
python算的上脚本语言吗
Jun 22 Python
Python代码需要缩进吗
Jul 01 Python
使用python把xmind转换成excel测试用例的实现代码
Oct 12 Python
python 实现音频叠加的示例
Oct 29 Python
通用的Django注册功能模块实现方法
Feb 05 Python
Python中glob库实现文件名的匹配
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
PHP实现数组向任意位置插入,删除,替换数据操作示例
2019/04/05 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
2019/07/06 PHP
基于jQuery的Tab选项框效果代码(插件)
2011/03/01 Javascript
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
JQuery onload、ready概念介绍及使用方法
2013/04/27 Javascript
JS兼容浏览器的导出Excel(CSV)文件的方法
2014/05/03 Javascript
JavaScript获取页面中第一个锚定文本的方法
2015/04/03 Javascript
基于Jquery制作图片文字排版预览效果附源码下载
2015/11/18 Javascript
javascript实现获取指定精度的上传文件的大小简单实例
2016/10/25 Javascript
Vue.js中兄弟组件之间互相传值实例
2017/06/01 Javascript
vue.js中过滤器的使用教程
2017/06/08 Javascript
解决vue-pdf查看pdf文件及打印乱码的问题
2020/11/04 Javascript
在Python中使用元类的教程
2015/04/28 Python
Python使用xlwt模块操作Excel的方法详解
2018/03/27 Python
对Python字符串中的换行符和制表符介绍
2018/05/03 Python
解决安装tensorflow遇到无法卸载numpy 1.8.0rc1的问题
2018/06/13 Python
Python读取txt内容写入xls格式excel中的方法
2018/10/11 Python
pygame游戏之旅 添加游戏介绍
2018/11/20 Python
Python上下文管理器用法及实例解析
2019/11/11 Python
Python底层封装实现方法详解
2020/01/22 Python
日本钓鱼渔具和户外用品网上商店:naturum
2016/08/07 全球购物
英国汽车座椅和婴儿车购物网站:Uber Kids
2017/04/19 全球购物
巴塞罗那观光通票:Barcelona Pass
2019/10/30 全球购物
Stio官网:男女、儿童户外服装
2019/12/13 全球购物
酒店出纳岗位职责
2013/12/29 职场文书
给儿子的表扬信
2014/01/15 职场文书
学校招生宣传广告词
2014/03/19 职场文书
教室布置标语
2014/06/26 职场文书
幼儿生日活动方案
2014/08/27 职场文书
社保缴纳证明申请书
2014/11/03 职场文书
英文感谢信范文
2015/01/21 职场文书
社区重阳节活动总结
2015/03/24 职场文书
python通过opencv调用摄像头操作实例分析
2021/06/07 Python
MySQ InnoDB和MyISAM存储引擎介绍
2022/04/26 MySQL
win sever 2022如何占用操作主机角色
2022/06/25 Servers
Python编写车票订购系统 Python实现快递收费系统
2022/08/14 Python