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定时检查某个进程是否已经关闭的方法
May 20 Python
Python基于pygame模块播放MP3的方法示例
Sep 30 Python
对python中执行DOS命令的3种方法总结
May 12 Python
对TensorFlow中的variables_to_restore函数详解
Jul 30 Python
python调用百度REST API实现语音识别
Aug 30 Python
Python获取统计自己的qq群成员信息的方法
Nov 15 Python
Win10里python3创建虚拟环境的步骤
Jan 31 Python
jupyternotebook 撤销删除的操作方式
Apr 17 Python
查看keras各种网络结构各层的名字方式
Jun 11 Python
Python实现简单的2048小游戏
Mar 01 Python
你需要掌握的20个Python常用技巧
Feb 28 Python
Python+Pillow+Pytesseract实现验证码识别
May 11 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
windows8.1下Apache+Php+MySQL配置步骤
2015/10/30 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
2017/03/28 PHP
利用PHP如何统计Nginx日志的User Agent数据
2019/03/06 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
2019/04/02 PHP
jquery.cookie.js 操作cookie实现记住密码功能的实现代码
2011/04/27 Javascript
jquery弹出关闭遮罩层实例
2013/08/06 Javascript
JavaScript加强之自定义callback示例
2013/09/21 Javascript
JavaScript设置首页和收藏页面的小例子
2013/11/11 Javascript
Javascript中常见的校验如域名、手机、邮箱等等
2014/01/02 Javascript
js检测iframe是否加载完成的方法
2015/11/26 Javascript
JavaScript动态创建form表单并提交的实现方法
2015/12/10 Javascript
jQuery实现的给图片点赞+1动画效果(附在线演示及demo源码下载)
2015/12/31 Javascript
浅谈JS的基础类型与引用类型
2016/09/13 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
2017/04/27 Javascript
AngularJS实现单一页面内设置跳转路由的方法
2017/06/28 Javascript
Angularjs Ng_repeat中实现复选框选中并显示不同的样式方法
2018/09/12 Javascript
vue3.0中使用postcss-pxtorem的具体方法
2019/11/20 Javascript
javascript设计模式 ? 装饰模式原理与应用实例分析
2020/04/14 Javascript
简单谈谈Python中的反转字符串问题
2016/10/24 Python
Python3 循环语句(for、while、break、range等)
2017/11/20 Python
CentOS7下python3.7.0安装教程
2018/07/30 Python
pycharm中使用anaconda部署python环境的方法步骤
2018/12/19 Python
Python3中的bytes和str类型详解
2019/05/02 Python
python openpyxl使用方法详解
2019/07/18 Python
Python中变量的输入输出实例代码详解
2019/07/28 Python
Django认证系统实现的web页面实现代码
2019/08/12 Python
10个最常见的HTML5面试题 附答案
2016/06/06 HTML / CSS
高山背包:High Sierra
2017/11/23 全球购物
通信生自我鉴定
2014/01/18 职场文书
厂区绿化方案
2014/05/08 职场文书
大专生自荐书范文
2014/06/22 职场文书
2014最新房贷收入证明范本
2014/09/12 职场文书
2014党员学习习主席讲话思想汇报
2014/09/15 职场文书
区政府领导班子个人对照检查材料
2014/09/25 职场文书
护士旷工检讨书
2015/08/15 职场文书
Github 使用python对copilot做些简单使用测试
2022/04/14 Python