3

我正在尝试创建自己的模板标签。我是如何做到的:

文件夹结构:

my_app/
    __init__.py
    models.py
    views.py
    my_app/
        templates/
            show.html
    templatetags/
            __init__.py
            depos.py

仓库.py:

# coding: utf-8
from django import template
from core.models import Depos

register = template.Library()

@register.inclusion_tag('show.html')
def show_dep():
    dep = Depos.objects.all().order_by('?')[0]
    return dep

显示.html:

<div id="user_testimonial">
    <blockquote>
        <p>{{ dep.dep }}</p>
        <cite>{{ dep.name }}, {{ dep.from }}</cite>
    </blockquote>
</div>

在我的模板中:

{% load depos %}
{% show_dep %}

但我有这个错误:

TypeError at /cadastro  
'Depos' object does not support item assignment
4

1 回答 1

7

您需要将字典对象从包含标签传递到包含标签模板。它在文档中提到

首先,定义接受参数并为结果生成数据字典的函数。这里重要的一点是我们只需要返回一个字典,而不是更复杂的东西。

所以试试:

@register.inclusion_tag('show.html')
def show_dep():
    return {
        'dep' : Depos.objects.all().order_by('?')[0]
    }
于 2013-04-02T21:38:55.580 回答