Django自定义包含标签

时间:2010-03-03 09:47:57

标签: django django-templates

我正在尝试构建自己的模板标签。 我不知道为什么我会收到这些错误。我正在关注Django doc。

这是我的应用程序的文件结构:

pollquiz/
    __init__.py
    show_pollquiz.html
    showpollquiz.py

这是showpollquiz.py:

from django import template
from pollquiz.models import PollQuiz, Choice
register = template.Library()

@register.inclusion_tag('show_pollquiz.html')
def show_poll():
    poll = Choice.objects.all()
    return { 'poll' : poll }

html文件:

<ul>
{% for poll in poll 
    <li>{{ poll.pollquiz }}</li>
{% endfor 
</ul>

在我的base.html文件中,我包括这样的

{% load showpollquiz %}
and
{% poll_quiz %}

然后我得到了错误:

Exception Value: Caught an exception while rendering: show_pollquiz.html

我不知道为什么会这样。有任何想法吗?请记住,我还是Django的新人

4 个答案:

答案 0 :(得分:8)

不应该所有自定义过滤器都在templatetags目录中吗?

templatetags/
    __init__.py
    showpollquiz.py

然后

@register.inclusion_tag('show_pollquiz.html')

在MY_TEMPLATE_DIR / show_pollquiz.html中查找模板

答案 1 :(得分:3)

您忘了关闭模板代码...此外,您应该更改for代码中的名称,但不能for poll in poll

<ul>
{% for p in poll %} <!--here-->
    <li>{{ p.pollquiz }}</li>
{% endfor %} <!--and here-->
</ul>

另请注意,您根本没有使用您定义的包含标记。我认为你混淆了一些代码,试着从a tutorial开始结束,事情会更清楚。

答案 2 :(得分:0)

我不打算编写自己的模板标签:一步一步,坚持现在的基础知识。 {% include 'show_pollquiz.html' %}

没有错

答案 3 :(得分:0)

我发现了问题。问题是@ register.inclusion_tag('show_pollquiz.html')  包含标记显然是在default_template目录中查找模板。所以这就是我得到错误的原因。

据我所知,文档中并不清楚。但我猜它是怎样的,作为一个模板而且全部......

哦,好吧。

现在,我如何将@register.inclusion_tag('show_pollquiz.html')放在与应用程序相同的文件夹中?在templatetags /?