2010-03-03 104 views
4

我试图构建自己的模板标签。 我不知道为什么我得到这些错误。我正在关注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的

+1

你完成了教程吗?你在扩展教程吗?有几件事对我来说很奇怪(你将模板放在与Python代码相同的目录中,你有一个名为'show_poll'的包含标签,但是我看不到你在使用它 - 你正在使用自定义标签叫做'poll_quiz')。 – 2010-03-03 09:52:31

回答

8

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

templatetags/ 
    __init__.py 
    showpollquiz.py 

然后

@register.inclusion_tag('show_pollquiz.html') 

看起来MY_TEMPLATE_DIR/show_pollquiz.html为模板

+0

是的!多数民众赞成我也想通了!你的正确 – Harry 2010-03-03 12:51:48

3

您忘记关闭您的模板标签......而且,你应该改变for标签名称,你不能有for poll in poll

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

另请注意,您并未使用您定义的包含标签。我认为你得到了一些混淆的代码,试着从头开始结束,事情会变得更加清晰。

+0

你好。 我关闭了endfor标签,但仍然出现同样的错误 – Harry 2010-03-03 10:54:59

+1

您引用的文档是针对Django 0.95的。最新的是在这里:http://docs.djangoproject。com/en/dev/ref/templates/api/ – 2010-03-03 12:51:19

+0

已修复!谢谢:) – 2010-03-04 08:34:39

0

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

+1

请参阅http://stackoverflow.com/questions/2357493/why-were-the-original-authors-of-django-against-include-tags – 2010-03-03 13:38:32

0

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

根据我的说法,这在文档中并不清楚。但我想它是如何,作为一个模板和所有...

哦,好吧。

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