3

Django のビルトイン コメント モジュールを使用して、テンプレートにビルトイン コメント フォームを単純にレンダリングしたいのですが、これは TemplateSyntaxError 例外を返します。

このエラーのデバッグに助けが必要です。Google で検索して 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

今日も同じ問題がありました。まだ作成していない 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 に答える
1

エラー メッセージは、次の逆 URL が見つからないことを示しています。


   django.contrib.comments.views.comments.post_comment

したがって、基本的に、URL で何かが正しく構成されていません。物事がどのようにセットアップされているかをもっと見ることができなければ、正確に何を知るのは難しい.

urls.py に含まれる urls パターンの順序を変更して、django コメントの URL を強制的に一番上に配置してみてはいかがでしょうか?

于 2009-12-10T13:47:31.580 に答える