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 [缩短]:

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

4 回答 4

6

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

问题肯定出在您的 URL 配置上,您的设置方式与我相同:

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

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

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

否则 django 无法在路径 comments/... 下正确包含所有必要的 url

希望这可以帮助。

于 2011-12-31T00:54:14.173 回答
1

错误消息表明它找不到反向 url:


   django.contrib.comments.views.comments.post_comment

所以基本上你的网址中没有正确配置一些东西。如果不能看到更多的东西是如何设置的,就很难确切地知道是什么。

也许尝试重新排序 urls.py 中包含的 urls 模式,以强制 django 评论 url 到顶部?

于 2009-12-10T13:47:31.580 回答
1

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

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

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

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

于 2009-12-11T17:40:36.887 回答
1

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

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

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

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

于 2009-12-14T03:46:47.090 回答