1

私はdjango-threadedcommentsを使用しています。csrfトークンとユーザーテンプレートタグの2つを除いて、すべて正常に機能します。

問題は、ユーザーがコメントを送信するときに、フォームの csrf トークンがないため、フォームをサーバー側で検証できないことです。threaded-comments が内部的に渡す csrf トークンを辞書に追加しようとしましたが、結果はありません。エラーを受け取り続けました (ほとんどのエラーは、このメソッドが 2 つの引数と 3 つの引数しかとらないことを示しています)。これらのメソッドを修正して、3 つの引数を受け入れ、さらに 3 つ目の引数を渡すようにしました。失敗。

誰かが過去に同じ問題に出くわして解決しましたか? これは私にとって受け入れられる解決策ではないためです:

MIDDLEWARE_CLASSES = (
    #'django.middleware.csrf.CsrfViewMiddleware',
)

2 つ目 - コメントを投稿したユーザーの user_id を取得する HTML ヘルパーがあります。ユーザーの名前をIDで取得するためのすぐに使えるhtmlヘルパーはありますか、それとも自分で作成する必要がありますか?

http://code.google.com/p/django-threadedcomments/

これがプロジェクトのコードです。ここに投稿する必要があるチャンクを正確に伝えることはできないため、プロジェクト全体へのリンクを提供します。

私は本当にここで立ち往生しており、どんな助けも歓迎します。

前もって感謝します。

4

3 に答える 3

1

threaded-commentsが内部を通過して結果が得られない辞書にcsrfトークンを追加しようとしました。

csrf_tokenテンプレートタグです。引数としてどこかに渡さないでください。

私が調べたところ、これはhtmlレンダリングがないthreadedcommentsことに基づいているため、テンプレートにを挿入するのはあなた次第です。contrib.commentscsrf_token

フォームコードを表示しているTEMPLATEコードはどのように見えますか?

CsrfViewMiddleware有効にしてビューで使用している場合は、タグ内RequestContextに追加するだけです。{% csrf_token %}<form></form>

ユーザー名の取得に関しては
ThreadedCommentはそのサブクラスにプロパティCommentがありnameます。または、直接アクセスすることもできますUser...

{% for comment in comments % 
    {{ comment.user.first_name }}
    {{ comment.name }}
{% endfor %}
于 2011-01-30T19:57:20.820 に答える
1

{% csrf_token %}タグまたは@csrf_protectビューで使用する必要があります

于 2011-01-30T12:16:18.703 に答える
-1

フォームを独自のテンプレートに配置し、{% include %}それをページ テンプレートに配置できます。Django 1.3 以降{% include %}、含まれているテンプレートにコンテキスト変数を渡すことができます。django.contrib.commentsテンプレートタグの代わりに使用しているものは次のとおりです。

...
{% include "comments/comment-form.html" with content_object=article user=request.user %}
...

{%csrf_token %}メイン ビュー コンテキストを使用しているため、この含まれているテンプレートで機能します。

于 2011-05-06T22:54:52.627 に答える