【发布时间】:2012-04-19 16:41:53
【问题描述】:
我需要实现一个模板标签,该标签将返回一个字符串,其中包含来自对象的项目集合。
我创建了以下结构:
produtos/
templatetags/
__init__.py
produto_tags.py
produto_tags.py:
# -*- coding: utf-8 -*-
from django import template
from django.template import Node
from produto.models import Produto
from django.template.loader import render_to_string
register = template.Library()
@register.tag
def get_all_tags(parser, token):
args = token.split_contents()
return ProdutoTemplateNode(args[1])
class ProdutoTemplateNode(Node):
def __init__(self, produto):
self.produto = produto
def render(self, context):
list = []
produto = template.Variable(self.produto).resolve(context)
tags = produto.tags.all()
if tags:
for tag in tags:
list.append(tag.name)
return ", ".join(list)
else:
return u'Não existem tags para este produto'
模板:
{% load produto_tags %}
...
{% for produto in produtos %}
<li id="{{ produto.ordenacao }}" data-tags="{% get_all_tags produto %}">
...
</li>
{% endfor %}
</ul>
{% else %}
<p>Não existem produtos cadastrados no sistema</p>
{% endif %}
我收到此错误:
TemplateSyntaxError at /concrete/nossos-sites.html
Invalid block tag: 'get_all_tags', expected 'empty' or 'endfor'
我读过其他线程,人们说如果标签不存在就会发生此错误,而且似乎是这样。我也一直在查看 djangoproject.com 文档,但找不到任何关于可能发生的事情的线索。
谢谢!
【问题讨论】:
标签: django python-2.7