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采用socket模拟TCP通讯的实现方法
Nov 19 Python
Python多线程同步Lock、RLock、Semaphore、Event实例
Nov 21 Python
numpy自动生成数组详解
Dec 15 Python
python实现多人聊天室
Mar 31 Python
python实现贪吃蛇小游戏
Mar 21 Python
对于Python深浅拷贝的理解
Jul 29 Python
对django 模型 unique together的示例讲解
Aug 06 Python
Python动态声明变量赋值代码实例
Dec 30 Python
pytorch masked_fill报错的解决
Feb 18 Python
python实现简易版学生成绩管理系统
Jun 22 Python
python实现MD5进行文件去重的示例代码
Jul 09 Python
Elasticsearch 基本查询和组合查询
Apr 19 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实现httpclient类示例
2014/04/08 PHP
PHP使用mysql_fetch_row查询获得数据行列表的方法
2015/03/18 PHP
使用纯php代码实现页面伪静态的方法
2015/07/25 PHP
php微信公众平台交互与接口详解
2016/11/28 PHP
laravel中命名路由的使用方法
2017/02/24 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
2019/01/17 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
客户端静态页面玩分页
2006/06/26 Javascript
use jscript List Installed Software
2007/06/11 Javascript
jquery 1.3.2 IE8中的一点点的小问题解决方法
2009/07/10 Javascript
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
浅析JavaScript中的同名标识符优先级
2013/12/06 Javascript
JavaScript 学习笔记之语句
2015/01/14 Javascript
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
javascript基础语法——全面理解变量和标识符
2016/06/02 Javascript
JS基于HTML5的canvas标签实现炫目的色相球动画效果实例
2016/08/24 Javascript
JavaScript给每一个li节点绑定点击事件的实现方法
2016/12/01 Javascript
jQuery Easyui 下拉树组件combotree
2016/12/16 Javascript
jQuery动态追加页面数据以及事件委托详解
2017/05/06 jQuery
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
2017/06/17 Javascript
微信小程序实现根据字母选择城市功能
2017/08/16 Javascript
JS实现小球的弹性碰撞效果
2017/11/11 Javascript
详解React项目的服务端渲染改造(koa2+webpack3.11)
2018/03/19 Javascript
Vue 使用中的小技巧
2018/04/26 Javascript
浅析Vue中拆分视图层代码的5点建议
2019/08/15 Javascript
React冒泡和阻止冒泡的应用详解
2020/08/18 Javascript
python matplotlib 在指定的两个点之间连线方法
2018/05/25 Python
Python爬虫使用脚本登录Github并查看信息
2018/07/16 Python
在Python3 numpy中mean和average的区别详解
2019/08/24 Python
会计专业导师推荐信
2014/03/08 职场文书
委托证明书
2014/09/17 职场文书
小学数学教学反思范文
2016/02/16 职场文书
Nginx下配置Https证书详细过程
2021/04/01 Servers
Matplotlib绘制混淆矩阵的实现
2021/05/27 Python
python面向对象版学生信息管理系统
2021/06/24 Python
Win11筛选键导致键盘失灵怎么解决? Win11关闭筛选键的技巧
2022/04/08 数码科技