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连接mysql数据库示例(做增删改操作)
Dec 31 Python
Python的Flask框架与数据库连接的教程
Apr 20 Python
举例讲解Python中装饰器的用法
Apr 27 Python
python中实现延时回调普通函数示例代码
Sep 08 Python
Python查找两个有序列表中位数的方法【基于归并算法】
Apr 20 Python
python3爬虫之设计签名小程序
Jun 19 Python
Python文件如何引入?详解引入Python文件步骤
Dec 10 Python
django写用户登录判定并跳转制定页面的实例
Aug 21 Python
Python操作MySQL数据库实例详解【安装、连接、增删改查等】
Jan 17 Python
python3 中使用urllib问题以及urllib详解
Aug 03 Python
PyQt5的相对布局管理的实现
Aug 07 Python
基于django和dropzone.js实现上传文件
Nov 24 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变量引用的面试题
2010/08/08 PHP
php删除页面记录 同时刷新页面 删除条件用GET方式获得
2012/01/10 PHP
探讨PHP中OO之静态关键字以及类常量的详解
2013/06/07 PHP
php获取apk包信息的方法
2014/08/15 PHP
PHP编程入门的基本语法知识点总结
2016/01/26 PHP
CI框架扩展系统核心类的方法分析
2016/05/23 PHP
PHP的mysqli_sqlstate()函数讲解
2019/01/23 PHP
js性能优化 如何更快速加载你的JavaScript页面
2012/03/17 Javascript
在浏览器窗口上添加遮罩层的方法
2012/11/12 Javascript
js 获取class的元素的方法 以及创建方法getElementsByClassName
2013/03/11 Javascript
基于jquery插件制作左右按钮与标题文字图片切换效果
2013/11/07 Javascript
javascript中处理时间戳为日期格式的方法
2014/01/02 Javascript
window.location的重写及判断location是否被重写
2014/09/04 Javascript
javascript中FOREACH数组方法使用示例
2016/03/01 Javascript
JavaScript禁止复制与粘贴的实现代码
2016/05/16 Javascript
JS+HTML5手机开发之滚动和惯性缓动实现方法分析
2016/06/12 Javascript
webpack打包多页面的方法
2018/11/30 Javascript
原生JS实现烟花效果
2020/03/10 Javascript
探索node之事件循环的实现
2020/10/30 Javascript
[06:53]DOTA2每周TOP10 精彩击杀集锦vol.3
2014/06/25 DOTA
Python多进程同步Lock、Semaphore、Event实例
2014/11/21 Python
Python map和reduce函数用法示例
2015/02/26 Python
Django 限制用户访问频率的中间件的实现
2018/08/23 Python
Python GUI编程 文本弹窗的实例
2019/06/11 Python
python根据文本生成词云图代码实例
2019/11/15 Python
python绘制彩虹图
2019/12/16 Python
突袭HTML5之Javascript API扩展4—拖拽(Drag/Drop)概述
2013/01/31 HTML / CSS
美国医生配方营养补充剂供应商:Healthy Directions
2019/07/10 全球购物
美国轻奢时尚购物网站:REVOLVE(支持中文)
2020/07/18 全球购物
大学生村官事迹材料
2014/01/21 职场文书
毕业生找工作求职信
2014/08/05 职场文书
党政领导班子群众路线对照检查材料思想汇报
2014/09/27 职场文书
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang
HTML常用标签超详细整理
2022/03/19 HTML / CSS
【海涛dota解说】一房久违的影魔魂守二连发
2022/04/01 DOTA
python内置模块之上下文管理contextlib
2022/06/14 Python