Django 1.1 - 注释 - 'render_comment_form'返回TemplateSyntaxError

时间:2009-12-10 00:42:24

标签: python django exception django-templates django-comments

我想简单地使用Django的内置注释模块在模板中呈现内置注释表单,但这会返回TemplateSyntaxError异常。

我需要帮助调试此错误,因为在谷歌搜索和使用Django API参考后,我仍然没有得到任何更远。

的信息:

这是模板'_post.html'[缩短]:

<div id="post_{{ object.id }}">
<h2>
    <a href="{% url post object.id %}">{{ object.title }}</a>
    <small>{{ object.pub_date|timesince }} ago</small>
    </h2>
    {{ object.body }}
    {% load comments %}
    {% get_comment_count for object as comment_count %}
    <p>{{ comment_count }}</p>
    <!-- Returns 0, because no comments available  -->
    {% render_comment_form for object %}
    <!-- Returns TemplateSyntaxError -->

这是渲染时的异常输出:

Caught an exception while rendering: Reverse for 'django.contrib.comments.views.comments.post_comment'
with arguments '()' and keyword arguments '{}' not found.1  
{% load comments i18n %}
        <form action="{% comment_form_target %}" method="post">
          {% if next %}<input type="hidden" name="next" value="{{ next }}" />{% endif %}
          {% for field in form %}
            {% if field.is_hidden %}
              {{ field }}
            {% else %}
          {% if field.errors %}{{ field.errors }}{% endif %}
          <p
            {% if field.errors %} class="error"{% endif %}
            {% ifequal field.name "honeypot" %} style="display:none;"{% endifequal %}>
            {{ field.label_tag }} {{ field }}

/posts/urls.py [缩短]:

queryset = {'queryset': Post.objects.all(),
            'extra_context' : {"tags" : get_tags}
           }   
urlpatterns = patterns('django.views.generic.list_detail',
    url('^$',                           'object_list',      queryset,
        name='posts'),
    url('^blog/(?P<object_id>\d+)/$',   'object_detail',    queryset,
        name='post'),
)

/urls.py [缩短]:

urlpatterns = patterns('',
    (r'', include('posts.urls')),
    (r'^comments/$', include('django.contrib.comments.urls')),
)

4 个答案:

答案 0 :(得分:6)

我遇到了同样的问题,render_comment_form模板标签正在触发它。

问题肯定在于您的网址配置,您设置的方式与我的方式相同:

(r'^comments/$', include('django.contrib.comments.urls'))

正确的方法是在'comments /'之后删除'$':

(r'^comments/', include('django.contrib.comments.urls'))

否则django无法在路径评论/...

下正确包含所有必要的URL

希望这有帮助。

答案 1 :(得分:1)

错误消息表示无法找到以下的反向网址:


   django.contrib.comments.views.comments.post_comment

所以基本上没有在您的网址中配置某些内容。如果不能更好地了解事情的设置,就很难确切知道是什么。

也许尝试重新订购你的urls.py中的urls模式包含,强制django评论网址到顶部?

答案 2 :(得分:1)

今天我遇到了同样的问题。我在urls.py中引用了一个我尚未创建的视图。

来自http://docs.djangoproject.com/en/dev/topics/http/urls/#reverse

  

作为计算哪些URL名称的一部分   映射到哪些模式,反向()   功能必须导入你的所有   URLconf文件并检查其名称   每个视图。这涉及进口   每个视图功能。如果有的话   导入任何你的错误   查看函数,会导致   reverse()引发错误,即使   那个视图功能不是你的那个   正试图扭转。

     

确保您引用的任何视图   在您的URLconf文件中存在且可以   正确导入。不包括在内   引用您没有的视图的行   写了,因为那些观点会   不可进口。

答案 3 :(得分:1)

此错误表示找到了视图django.contrib.comments.views.comments.post_comment

但没有传递args()或kwargs {}。

它没有将object.id的值传递给url。

取出url标记,看看<div id="post_{{object.id}}">的id是否反映了正确的object.id