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 03 Python
Python实现爬取需要登录的网站完整示例
Aug 19 Python
Python读取csv文件分隔符设置方法
Jan 14 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
Jan 19 Python
基于多进程中APScheduler重复运行的解决方法
Jul 22 Python
详解Python 4.0 预计推出的新功能
Jul 26 Python
Django Docker容器化部署之Django-Docker本地部署
Oct 09 Python
python多线程使用方法实例详解
Dec 30 Python
解决pycharm不能自动补全第三方库的函数和属性问题
Mar 12 Python
Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐)
May 10 Python
Python OpenCV实现测量图片物体宽度
May 27 Python
Python同时迭代多个序列的方法
Jul 28 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统计文件大小,以GB、MB、KB、B输出
2011/05/29 PHP
探讨:php中在foreach中使用foreach ($arr as &amp;$value) 这种类型的解释
2013/06/24 PHP
ThinkPHP的MVC开发机制实例解析
2014/08/23 PHP
php使用fopen创建utf8编码文件的方法
2014/10/31 PHP
php显示指定目录下子目录的方法
2015/03/20 PHP
学习php设计模式 php实现访问者模式(Visitor)
2015/12/07 PHP
利用php-cli和任务计划实现刷新token功能的方法
2017/05/03 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
2019/07/24 PHP
jquery 模板的应用示例
2013/11/12 Javascript
理解javascript中的回调函数(callback)
2014/09/02 Javascript
使用原生JS实现弹出层特效
2014/12/22 Javascript
javascript面向对象之访问对象属性的两种方式分析
2015/01/13 Javascript
jQuery插件开发的五种形态小结
2015/03/04 Javascript
JavaScript+CSS实现仿Mootools竖排弹性动画菜单效果
2015/10/14 Javascript
js实现选中页面文字将其分享到新浪微博
2015/11/05 Javascript
超实用的JavaScript表单代码段
2016/02/26 Javascript
Ionic默认的Tabs模板使用实例
2016/08/29 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
2016/09/04 Javascript
vue 如何添加全局函数或全局变量以及单页面的title设置总结
2017/06/01 Javascript
详解nodejs异步I/O和事件循环
2017/06/07 NodeJs
微信小程序多列选择器range-key使用详解
2020/03/30 Javascript
Angular4编程之表单响应功能示例
2017/12/13 Javascript
微信小程序实现手指触摸画板
2018/07/09 Javascript
vue项目搭建以及全家桶的使用详细教程(小结)
2018/12/19 Javascript
JS扁平化输出数组的2种方法解析
2019/09/17 Javascript
解决layUI的页面显示不全的问题
2019/09/20 Javascript
[43:24]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS Liquid
2018/03/30 DOTA
Python 处理图片像素点的实例
2019/01/08 Python
python实现浪漫的烟花秀
2019/01/30 Python
上海期货面试题
2014/01/31 面试题
物流创业计划书
2014/02/01 职场文书
党建工作目标管理责任书
2015/01/29 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
遗愿清单观后感
2015/06/09 职场文书
2016年教师政治思想表现评语
2015/12/02 职场文书
《最后一头战象》教学反思
2016/02/16 职场文书