include 标签允许在模板中包含其它的模板的内容。 标签的参数是所要包含的模板名称,可以是一个变量,也可以是用单/双引号硬编码的字符串。 每当在多个模板中出现相同的代码时,就应该考虑是否要使用 {% include %} 来减少重复

1. include 标签的基本用法

假设我们在多个 HTML 模板中都需要用到显示用户自定义的 HTML 片段,显示的方式是一个标题加上需要显示的具体内容。

下面的这个模板文件 html-section.html 就满足了基本的需求,我们可以在不同的 HTML 模板中引入这个子模版。

include 后面可以使用字符串或者变量名来指定模板路径

<div class="section-title">
<span>{{title}}</span>
</div> <div class="section-content">
<div id="{{section_id}}">{% autoescape off %}{{content | default:''}}{% endautoescape %}</div>
</div>

在各个父模板中就可以使用 include 指令来引入这个子模版。

由于默认情况下子模版可以访问复模版中的变量,子模版可以正常显示指定的 HTML 内容。

{% include 'html-section.html' %}

## 2. include with

如果需要在一个网页多次引入同一个子模版,上面的方式就会出现问题。

因为在子模版中我们指定了变量名称,这个时候我们可以使用 with 关键字给子模版指定变量

{% include 'html-section.html' with title="Summary" content=article_summary section_id="article-summary" %}

{% include 'html-section.html' with title="Article Body" content=article_body section_id="article-body" %}

{% include 'html-section.html' with title="Contact US" content=article_footer section_id="article-contact" %}

### 2.1 使用过滤器修改变量

设想一下这样的场景:一个 HTML 页面中多次引入了一个子模版,其中部分 include 语句需要做一些定制。

比如说在变量后面加入固定的文字。

当然可以通过修改子模版满足任意的定制化需求。但如果仅仅只是变量上的改变, 修改子模版就显得太繁琐。

with 关键字可以在不改变子模版的前提下,使用过滤器来修改变量的值

假如我们需要将上面的子模版做以下的修改:

  • 使用 content 里面的第一个单词作为标题
  • 所有的标题后面添加指定的内容
  • 标题的第一个字母要保证大写

在不改变子模版的前提下,我们可以将 include 语句做以下的修改

{% include 'html-section.html' with title=content|truncatewords:1|add:' Section'|capfirst content=article_footer section_id="article-contact" %}

### 2.2 阻止子模版访问除了 `with` 指定的变量

默认情况下子模版可以访问父模板的所有变量,在 Django 中还可以通过使用 only 选项来阻止这个默认行为

{% include "html-section.html" with title="Summary" content=article_summary section_id="article-summary" only %}

## 3. with 标签

另外 Django 还提供了单独的 with 标签来修改或者指定变量的值。

可以单独使用,也可以搭配 include 标签使用。使用方法如下:

<!-- 使用 with 标签指定变量 -->

{% with title="summary" content=article_body|capfirst section_id="article-body" %}
{% include 'html-section.html' %}
{% endwith %} <!-- 使用 with as --> {% with content|truncatewords:1|capfirst as title %}
{% include 'html-section.html'%}
{% endwith %}

转载请注明出处: [zf-l](http://www.cnblogs.com/zf-l/p/django-include.html)

Django 模板中 include 标签使用小结的更多相关文章

  1. 测试开发之Django——No6.Django模板中的标签语言

    模板中的标签语言 1.if/else {% if  %} 标签检查(evaluate)一个变量,如果这个变量为真(即:变量存在,非空,不是布尔值假),系统会显示在{% if  %} 和 {% endi ...

  2. Django模板中include的标签的使用

    在很多网站中,基本上的都会有一个开头和一个结尾,在每一个网页中都会显示.相对于这种的来说,在Django中,最好的方法就是使用include的标签,在每一个模板中都加入这个开头和结尾的标签. 官方文档 ...

  3. django学习-7.html模板中include标签使用场景

    1.前言 假设一个公司A有一个网站B,且网站B有5个不同的页面分别为C1,C2,C3,C4,C5. 那么,我们在打开这5个不同页面后去查看页面的整体内容,会发现每个页面的顶部内容.底部内容都一模一样. ...

  4. django模板中的extends和include使用方法

    一.extends使用方法 首先extends也就是继承,子类继承父类的一些特性.在django模板中通过继承可以减少重复代码. 首先我们建立一个app,名字叫做hello.别忘了在settings. ...

  5. 在 Django 模板中遍历复杂数据结构的关键是句点字符

    在 Django 模板中遍历复杂数据结构的关键是句点字符 ( . ). 实例二 mysit/templates/myhtml2.html修改如下 <!DOCTYPE html> <h ...

  6. django模板--条件控制标签

    条件控制标签 在django模板中可以通过条件控制标签进行逻辑控制,条件控制标签的语法如下: {% if condition1 %} ... {% elif condition2 %} ... {% ...

  7. django 模板中定义临时列表

    <ul class="num_t clr"> {% for obj in ""|ljust:"10" %} <li> ...

  8. Django 模板中引用静态资源(js,css等)

    Django 模板中免不了要用到一些js和CSS文件,查了很多网页,被弄得略晕乎,还是官网靠谱,给个链接大家可以自己看英文的. https://docs.djangoproject.com/en/1. ...

  9. android中include标签使用详解

    android中include标签是为了便于控件的覆用的一个很好解决方案.   但是也有一些需要注意的地方,下面是本人在项目中碰到过的一个问题,做此记录,便于以后查看.   include标签用法. ...

随机推荐

  1. linux文件权限解析(摘)

    用户组 在linux中的每个用户必须属于一个组,不能独立于组外.在linux中每个文件有所有者.所在组.其它组的概念 - 所有者 - 所在组 - 其它组 - 改变用户所在的组 所有者 一般为文件的创建 ...

  2. org.springframework.core.io包内的源码分析

    前些日子看<深入理解javaweb开发>时,看到第一章java的io流,发觉自己对io流真的不是很熟悉.然后看了下JDK1.7中io包的一点点代码,又看了org.springframewo ...

  3. 解决外部编辑器修改Eclipse文件延迟刷新【补充】

    在之前的文章,使用gulp解决外部编辑器修改Eclipse文件延迟刷新,原理是用gulp把更改过的项目文件直接复制一份到Tomcat的webapp.root下, 现在补充另外一种方法,双击Server ...

  4. hive自定义UDF

    udf udaf udtf 使用方式 hiverc文件 1.jar包放到安装日录下或者指定目录下 2.${HIVE_HOME}/bin目录下有个.hiverc文件,它是隐藏文件. 3.把初始化语句加载 ...

  5. JSP入门2

    1. CRUD是Create(创建).Read(读取).Update(更新)和Delete(删除)的缩写,一般应用有这四项也就足够了. 我们这里的例子是对联系人信息进行CRUD操作. 2. javab ...

  6. Hbase 技术细节笔记(上)

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:张秀云 前言 最近在跟进Hbase的相关工作,由于之前对Hbase并不怎么了解,因此系统地学习了下Hbase,为了加深对Hbase的 ...

  7. bzoj4403(模板题)

    序列统计,将答案转化,然后就是Lucas的模板题,用费马小定理瞎搞. #include<cstdio> #include<iostream> #include<algor ...

  8. SQLServer中SQL语句与可执行二进制语句

    SQLServer可以执行正常SQL语句也可以执行被转换的二进制语句,一般会用此方法进行数据库注入操作,骗过基本的字符过滤 --将二进制格式转为普通SQL语句 ) = 0x53454C45435420 ...

  9. Log4j按级别输出日志到不同文件配置分析 (转:projava)

    关于LOG4J 按照级别输出日志,并按照级别输出到不同文件中的说法有很多, 网上贴的最多的log4j.properties的设置是这样的 log4j.rootLogger=info,stdout,in ...

  10. web前端面试官挖的那些坑(js)

    题目1: function Foo() { getName = function () { alert (1); }; return this; } Foo.getName = function () ...