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实现的简单FTP上传下载文件实例
Jun 30 Python
python Django批量导入不重复数据
Mar 25 Python
Python标准库之collections包的使用教程
Apr 27 Python
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
Jan 11 Python
pandas的object对象转时间对象的方法
Apr 11 Python
利用Pycharm断点调试Python程序的方法
Nov 29 Python
python Pillow图像处理方法汇总
Oct 16 Python
Python正则表达式高级使用方法汇总
Jun 18 Python
django rest framework使用django-filter用法
Jul 15 Python
一文详述 Python 中的 property 语法
Sep 01 Python
pytorch中[..., 0]的用法说明
May 20 Python
python绘制云雨图raincloud plot
Aug 05 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 文章采集正则代码
2009/12/28 PHP
简单实用的网站PHP缓存类实例
2014/07/18 PHP
微信支付开发动态链接Native支付
2016/07/12 PHP
读jQuery之五(取DOM元素)
2011/06/20 Javascript
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
jQuery.validate 常用方法及需要注意的问题
2013/03/20 Javascript
javascript数据结构之二叉搜索树实现方法
2015/11/25 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
2016/09/13 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
2016/09/23 Javascript
微信小程序入门教程
2016/11/18 Javascript
jQuery Easyui datagrid行内实现【添加】、【编辑】、【上移】、【下移】
2016/12/19 Javascript
JS作用域深度解析
2016/12/29 Javascript
Bootstrap入门教程一Hello Bootstrap初识
2017/03/02 Javascript
webpack构建react多页面应用详解
2017/09/15 Javascript
js时间戳与日期格式之间相互转换
2017/12/11 Javascript
一个Vue页面的内存泄露分析详解
2018/06/25 Javascript
解决在vue项目中webpack打包后字体不生效的问题
2018/09/01 Javascript
Vuejs+vue-router打包+Nginx配置的实例
2018/09/20 Javascript
python中readline判断文件读取结束的方法
2014/11/08 Python
python文件读写操作与linux shell变量命令交互执行的方法
2015/01/14 Python
用tensorflow搭建CNN的方法
2018/03/05 Python
python实现ID3决策树算法
2018/08/29 Python
将Python文件打包成.EXE可执行文件的方法
2019/08/11 Python
Django 请求Request的具体使用方法
2019/11/11 Python
python两个_多个字典合并相加的实例代码
2019/12/26 Python
Python cookie的保存与读取、SSL讲解
2020/02/17 Python
Python while true实现爬虫定时任务
2020/06/08 Python
会走动的图形html5时钟示例
2014/04/27 HTML / CSS
研发工程师岗位职责
2014/04/28 职场文书
会计系毕业求职信
2014/08/07 职场文书
课外小组活动总结
2014/08/27 职场文书
国家机关领导干部民主生活会对照检查材料思想汇报
2014/09/17 职场文书
2016党校学习心得体会
2016/01/07 职场文书
《日月潭》教学反思
2016/02/20 职场文书
Python爬虫:从m3u8文件里提取小视频的正确操作
2021/05/14 Python
剑指Offer之Java算法习题精讲二叉树专项训练
2022/03/21 Java/Android