Django 1.1 - 评论 - 'render_comment_form' 返回 TemplateSyntaxError

3 投票
4 回答
1906 浏览
提问于 2025-04-15 16:51

我想在模板中简单地渲染一个内置的评论表单,使用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 个回答

1

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

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

在确定哪些URL名称对应哪些模式时,reverse()函数需要导入你所有的URL配置文件,并检查每个视图的名称。这就意味着要导入每个视图函数。如果在导入任何视图函数时出现错误,即使那个视图函数不是你想要反向查找的,也会导致reverse()报错。

确保你在URL配置文件中引用的视图都存在,并且可以正确导入。不要包含那些你还没写的视图的引用,因为那些视图是无法导入的。

1

这个错误信息表示找不到反向链接的地址:


   django.contrib.comments.views.comments.post_comment

简单来说,就是你的网址配置有问题。因为看不到你具体是怎么设置的,所以很难准确判断出哪里出错了。

你可以试着调整一下你在urls.py文件中网址模式的顺序,把Django评论的链接放到最上面试试?

6

我也遇到过完全一样的问题,是因为 render_comment_form 这个模板标签引起的。

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

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

正确的做法是把 'comments/' 后面的 '$' 去掉:

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

否则,Django 就无法正确包含 'comments/' 路径下所有必要的 URL。

希望这能帮到你。

撰写回答