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 相关文章推荐
DJANGO-ALLAUTH社交用户系统的安装配置
Nov 18 Python
解决Python中字符串和数字拼接报错的方法
Oct 23 Python
Python数据结构之翻转链表
Feb 25 Python
pygame实现弹力球及其变速效果
Jul 03 Python
python简单实例训练(21~30)
Nov 15 Python
一百多行python代码实现抢票助手
Sep 25 Python
Python装饰器基础概念与用法详解
Dec 22 Python
python多线程实现TCP服务端
Sep 03 Python
flask 实现token机制的示例代码
Nov 07 Python
pandas 中对特征进行硬编码和onehot编码的实现
Dec 20 Python
python Xpath语法的使用
Nov 26 Python
python 调用js的四种方式
Apr 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
PHP应用JSON技巧讲解
2013/02/03 PHP
使用php+apc实现上传进度条且在IE7下不显示的问题解决方法
2013/04/25 PHP
php在linux下检测mysql同步状态的方法
2015/01/15 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
2016/10/13 PHP
使用PHP免费发送定时短信的实例
2016/10/24 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
2017/06/22 PHP
PHP+MySQL实现在线测试答题实例
2020/01/02 PHP
javascript 多浏览器 事件大全
2010/03/23 Javascript
js 赋值包含单引号双引号问题的解决方法
2014/02/26 Javascript
js判断文本框剩余可输入字数的方法
2015/02/04 Javascript
angularjs下拉框空白的解决办法
2017/06/20 Javascript
vue 打包后的文件部署到express服务器上的方法
2017/08/09 Javascript
React Router V4使用指南(精讲)
2018/09/17 Javascript
Vue.js 时间转换代码及时间戳转时间字符串
2018/10/16 Javascript
微信小程序实现获取准确的腾讯定位地址功能示例
2019/03/27 Javascript
使用p5.js实现动态GIF图片临摹重现
2019/10/23 Javascript
javascript 使用sleep函数的常见方法详解
2020/04/26 Javascript
JS面试题中深拷贝的实现讲解
2020/05/07 Javascript
小程序点餐界面添加购物车左右摆动动画
2020/09/23 Javascript
ant-design-vue 时间选择器赋值默认时间的操作
2020/10/27 Javascript
Python基于whois模块简单识别网站域名及所有者的方法
2018/04/23 Python
python实现跨excel的工作表sheet之间的复制方法
2018/05/03 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
django 多对多表的创建和插入代码实现
2019/09/09 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
2020/02/26 Python
浅谈python多线程和多线程变量共享问题介绍
2020/04/17 Python
如何将Pycharm中调整字体大小的方式设置为&quot;ctrl+鼠标滚轮上下滑&quot;
2020/11/17 Python
基于CSS3实现的漂亮Menu菜单效果代码
2015/09/10 HTML / CSS
HTML5 SEO优化的一些建议
2020/08/27 HTML / CSS
Spartoo葡萄牙鞋类网站:线上销售鞋履与时尚配饰
2017/01/11 全球购物
美国廉价机票预订网站:Cheapfaremart
2018/04/28 全球购物
幼儿园小班教学反思
2014/02/02 职场文书
销售竞赛活动方案
2014/08/23 职场文书
食堂管理制度范本
2015/08/04 职场文书
节水宣传标语口号
2015/12/26 职场文书
教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤
2021/09/25 Servers