我正在尝试构建自己的模板标签。 我不知道为什么我会收到这些错误。我正在关注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的新人
答案 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 /?
下