我正在尝试创建自己的模板标签。我是怎么做到的:
文件夹结构:
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
答案 0 :(得分:6)
您需要将包含标记中的字典对象传递给包含标记模板。 It's mentioned in the docs:
首先,定义获取参数的函数,并为结果生成数据字典。这里重点是我们只需要返回字典,而不是更复杂的字典。
所以试试:
@register.inclusion_tag('show.html')
def show_dep():
return {
'dep' : Depos.objects.all().order_by('?')[0]
}