Django过滤器和标签功能很强大,而且支持自定义标签,很是方便;其中一种标签是Inclusion tags,即包含标签,个人感觉比较反人类的

包含标签(Inclusion tags)通过渲染其他的模板来展示内容,这类标签的用途在于一些相似的内容的展示,并且返回的内容是渲染其他模板得到的内容。
这里我将举个小小栗子

我们自定义一个包含标签,这个标签将输出一个列表,我们可以这样使用这个标签
{% task_l %}

输出大概是这样的

下面我们一步一步来完成

首先定义一个函数,这个函数返回所有任务列表

def task_l():
task = TaskList.objects.all()
return {'task':task}

然后我们创建一个要被渲染的模板用于输出

$ cat templates/t.html

<select>
{% for t in task %}
<option value ="">{{ t }}</option>
{% endfor %}
</select>

最后使用inclusion_tag函数注册

register.inclusion_tag('t.html')(task_l)

这里写法不要错了,如果写成

...
register.inclusion_tag('t.html', task_l)

就会报如下错误

TemplateSyntaxError at /inclusion/
Invalid block tag on line 3: 'task_l'.Did you forget to register or load this tag?

当然还可以通过装饰符

@register.inclusion_tag('t.html')
def task_l:
...

还有,别忘了加上
register = template.Library()

完整的tag如下:

$ cat templatetags/mytet.py

from django import template
from tasklist.models import TaskList register = template.Library() def task_l():
task = TaskList.objects.all()
return {'task':task} register.inclusion_tag('t.html')(task_l)

最后我们构造一个函数用于展示我们的内容

$ cat views.py

def inclusion(request):
return render(request, 'inclusion.html', {})

inclusion.html的内容为

$ cat templates/inclusion.html

{% load mytet %}

<p>Inclusion Tags</p>

{% task_l %}

<br />
Done.

需要注意的是,t.html为渲染标签内容的模板,inclusion.html是显示内容的目标模板

最后我们再配置一下url路由

$ cat urls.py

 url(r'^inclusion/$', tl_views.inclusion),

之后打开浏览器即可看到效果

最新文章

  1. CentOS Mono Nginx 部署 MVC4+WebApi
  2. 文本框 textarea 动态显示行数(简单文本编辑器)
  3. JavaScript之数组方法整理
  4. 必应词典3.2去广告备忘笔记(转摘于roustar31)
  5. 探究chrome下的开发工具的各功能
  6. ActiveMQ第四弹:在HermesJMS中创建ActiveMQ Session
  7. Linux下J2EE环境搭建
  8. Redis-统计活跃用户
  9. Spring Data JPA教程, 第八部分:Adding Functionality to a Repository (未翻译)
  10. JQuery DOM 有关代码练习
  11. Week5(10月11日):国庆后补课的复杂心情
  12. 最简单的基于FFmpeg的AVDevice例子(屏幕录制)
  13. redis测试实践
  14. XAMPP支持多PHP版本
  15. httpClient closeableHttpClient
  16. [待优化笔记]原生JS实现验证框架 checkFun
  17. CodeForces 407C 组合数学(详解)
  18. 微信小程序的布局css样式
  19. 在现实面前,IT从业者的无奈
  20. JavaScript 深入了解对象中的属性

热门文章

  1. ubuntu k8s 命令补全
  2. Java中的集合Collection接口
  3. Luogu [P3367] 模板 并查集
  4. jqury点击返回顶部代码
  5. 【模拟】HHHOJ#251. 「NOIP模拟赛 伍」高精度
  6. DNS 工作原理是什么,域名劫持、域名欺骗、域名污染又是什么
  7. 使用MySQL yum源安装MySQL
  8. linux文件属性之用户和组基础知识
  9. classpath、WEB-INF
  10. Vue之数据传递