【问题标题】:Django Custom Inclusion TagsDjango 自定义包含标签
【发布时间】:2011-01-23 03:06:09
【问题描述】:

我正在尝试构建自己的模板标签。 我不知道为什么会出现这些错误。我正在关注 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 文件中,我包含这样的内容

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

然后我得到错误:

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

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

【问题讨论】:

  • 教程完成了吗?你在扩展教程吗?有几件事对我来说看起来很奇怪(您将模板与 Python 代码保存在同一目录中,您有一个名为 show_poll 的包含标记,但我看不出您在哪里使用它 - 您正在使用名为poll_quiz的自定义标签)。

标签: django django-templates


【解决方案1】:

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

templatetags/
    __init__.py
    showpollquiz.py

然后

@register.inclusion_tag('show_pollquiz.html')

在 MY_TEMPLATE_DIR/show_pollquiz.html 中查找模板

【讨论】:

    【解决方案2】:

    您忘记关闭模板标签...另外,您应该更改for 标签中的名称,您不能有for poll in poll

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

    另外请注意,您根本没有使用您定义的包含标签。我想你把代码弄混了,试着从头到尾检查a tutorial,事情会更清楚。

    【讨论】:

    【解决方案3】:

    我不会为编写自己的模板标签而烦恼:一步一步地做,现在坚持基本的。 {% include 'show_pollquiz.html' %}没有错

    【解决方案4】:

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

    据我所知,这在文档中并不清楚。但我猜它是怎么回事,作为一个模板等等......

    哦,好吧。

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

    【讨论】:

      猜你喜欢
      • 2012-12-22
      • 2011-08-10
      • 2012-01-14
      • 2011-11-29
      • 2010-10-30
      • 2012-07-07
      • 2012-08-20
      • 2017-04-06
      • 1970-01-01
      相关资源
      最近更新 更多