使用自定义模板标记时出错 - 对象不支持项目分配

时间:2013-04-02 21:29:44

标签: django django-templates

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

文件夹结构:

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

depos.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

show.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

1 个答案:

答案 0 :(得分:6)

您需要将包含标记中的字典对象传递给包含标记模板。 It's mentioned in the docs

  

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

所以试试:

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