Django 1.1 - comments - 'render_comment_form' 返回 TemplateSyntaxError

3

我希望在模板中简单地呈现一个内置的评论表单,使用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[shortened]:

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[shortened]:

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

6

我遇到了完全相同的问题,render_comment_form模板标签触发了它。

问题肯定出在你的URL配置上,你的设置方式和我的一样:

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

正确的方法是在“comments/”后面删除“$”符号:
(r'^comments/', include('django.contrib.comments.urls'))

否则,Django 无法在 comments/... 路径下正确包含所有必要的 URL。
希望这可以帮到你。

1

错误信息显示无法找到反向URL:


   django.contrib.comments.views.comments.post_comment

基本上,您的URL配置有问题。如果无法看到更多设置信息,很难确切知道问题出在哪里。

也许可以尝试重新排列urls.py中的URL模式包含,将Django评论URL强制置于顶部?


1

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

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

作为确定URL名称映射到哪些模式的一部分,reverse()函数必须导入所有URLconf文件并检查每个视图的名称。这涉及导入每个视图函数。如果在导入任何视图函数时出现任何错误,即使该视图函数不是您试图反转的视图函数,它也会导致reverse()引发错误。

确保您在URLconf文件中引用的任何视图都存在并且可以正确导入。不要包括引用您尚未编写的视图的行,因为这些视图将无法导入。


1

这个错误表示它找到了视图django.contrib.comments.views.comments.post_comment

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

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

去掉url标签,看看<div id="post_{{object.id}}">的id是否反映了正确的object.id


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接