zoukankan      html  css  js  c++  java
  • Django标签之包含标签Inclusion tags

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

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

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

    输出大概是这样的

    inclusion_tag

    下面我们一步一步来完成

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

    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?

    inclusion_err

    当然还可以通过装饰符

    @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),

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

  • 相关阅读:
    Unity物理系统随记
    Unity相机跟随小结
    unity制作赛车游戏
    动态编程
    C#-特性,反射,动态编程
    BASE64加解密
    idea快捷键
    git安装和git命令:全局设置用户名邮箱配置
    基于Node.js+MySQL开发的开源微信小程序商城(微信小程序)部署环境
    微信小程序开发入门(一),Nodejs搭建本地服务器
  • 原文地址:https://www.cnblogs.com/robinunix/p/7864850.html
Copyright © 2011-2022 走看看