Django自定义包含标签
我试图构建自己的模板标签。 我不知道为什么我得到这些错误。我正在关注Django文档。Django自定义包含标签
这是我的应用程序的文件结构:
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文件文件IM
包括我像这样
{% load showpollquiz %}
and
{% poll_quiz %}
卜然后我得到的错误:
Exception Value: Caught an exception while rendering: show_pollquiz.html
我不知道为什么会这样。有任何想法吗?请记住我还是新的Django的
应该不是所有的自定义过滤器都在templatetags目录中吗?
templatetags/
__init__.py
showpollquiz.py
然后
@register.inclusion_tag('show_pollquiz.html')
看起来MY_TEMPLATE_DIR/show_pollquiz.html为模板
是的!多数民众赞成我也想通了!你的正确 – Harry 2010-03-03 12:51:48
您忘记关闭您的模板标签......而且,你应该改变for
标签名称,你不能有for poll in poll
:
<ul>
{% for p in poll %} <!--here-->
<li>{{ p.pollquiz }}</li>
{% endfor %} <!--and here-->
</ul>
另请注意,您并未使用您定义的包含标签。我认为你得到了一些混淆的代码,试着从头开始结束,事情会变得更加清晰。
你好。 我关闭了endfor标签,但仍然出现同样的错误 – Harry 2010-03-03 10:54:59
您引用的文档是针对Django 0.95的。最新的是在这里:http://docs.djangoproject。com/en/dev/ref/templates/api/ – 2010-03-03 12:51:19
已修复!谢谢:) – 2010-03-04 08:34:39
我不打算编写自己的模板标签:一步一个脚印,坚持现在的基础知识。 {% include 'show_pollquiz.html' %}
请参阅http://*.com/questions/2357493/why-were-the-original-authors-of-django-against-include-tags – 2010-03-03 13:38:32
我发现这个问题。问题是,@ register.inclusion_tag('show_pollquiz.html') 包含标记显然是在default_template目录中寻找模板。所以这就是我得到错误的原因。
根据我的说法,这在文档中并不清楚。但我想它是如何,作为一个模板和所有...
哦,好吧。
现在,我该如何将@ register.inclusion_tag('show_pollquiz.html')与应用程序放在同一个文件夹中?在templatetags /下面?
你完成了教程吗?你在扩展教程吗?有几件事对我来说很奇怪(你将模板放在与Python代码相同的目录中,你有一个名为'show_poll'的包含标签,但是我看不到你在使用它 - 你正在使用自定义标签叫做'poll_quiz')。 – 2010-03-03 09:52:31