2012-01-07 7 views
1

私はdjangoコメントフレームワークを使用しています。それは、それは多くの機能を提供していると私はまた、さまざまなオプションがあることをソースファイルで見ることができますが、ドキュメントは少し貧しいです。djangoのコメントフレームワークに組み込まれた削除ボタンを提供する方法

二つの問題

  1. は私が掲示されている各コメントdelete buttonを提供したい、と私は別のページにユーザーをリダイレクトする必要はありませんがあります。私は、確認メッセージでコメントを削除したいだけです。
  2. error while submitting the comment formがある場合、ユーザーはredirected to the preview page(エラーも処理されます)ですが、私はこれを望ましくありません。私は、適切なエラーで、ユーザーが同じページにリダイレクトされるようにします。これをやり遂げるにはどうすればいいですか?

すべてのヘルプや方向があり、コメントの削除ビューがすでにあるが、それはモデレーションシステムの一部である

答えて

2

を高く評価しています。すべてのユーザーにcan_moderateのアクセス許可を許可する必要があります。アクセス許可は、ユーザーが望むコメントを削除することができます(ユーザーだけでなく)。あなたはすぐにそれが削除されたコメントは彼らに属していることを確認し、独自のビューを作成することができます。

from django.shortcuts import get_object_or_404 
from django.contrib.comments.view.moderate import perform_delete 
def delete_own_comment(request, comment_id): 
    comment = get_object_or_404(Comment, id=comment_id) 
    if comment.user.id != request.user.id: 
     raise Http404 
    perform_delete(request, comment) 

とテンプレートで

{% for comment in ... %} 
{% if user.is_authenticated and comment.user == user %} 
    {% url path.to.view.delete_comment comment_id=comment.id as delete_url %} 
    <a href="{{ delete_url }}">delete your comment</a> 
{% endif %} 
{% endfor %} 

第二の問題、you can see that the redirection will always happen if there are errors(のプレビュー= Falseのであってもセット)。あまりにも多くの回避策はありません。 post_commentビューをラップする独自のビューを作成することもできます(またはリダイレクトを使用して独自のpost_commentを作成することもできます)

+0

おかげで解決のためにたくさん、私はなぜ知らないが、それは動作していません。私はあなたが概説したとおりに行っていますが、それはうまく動作していません。 – Sachin

+0

'comment.user.idでないならば、request.user.id: 'はエラーを出していました。 .user: 'うまく動作し始めました。おかげで多くの助けを借りて – Sachin

+0

クール、私はそれを反映する答えを編集しました。 –

3

ビューのTimmyのコードフラグメントには1つのインポートステートメントがなく、応答が返されませんでした。

from django.shortcuts import get_object_or_404 
import django.http as http 
from django_comments.views.moderation import perform_delete 
from django_comments.models import Comment 

def delete_own_comment(request, id): 
    comment = get_object_or_404(Comment, id=id) 
    if comment.user.id != request.user.id: 
     raise Http404 
    perform_delete(request, comment) 
    return http.HttpResponseRedirect(comment.content_object.get_absolute_url()) 

これは、任意のメッセージを表示せずに元のページにリダイレクトします(おそらく、しかし、1コメント少ない):ここでは今、外部django_commentsアプリにアップデート同じコード、(Djangoは1.6以上)です。

このビューのURL登録:

url(r'^comments/delete_own/(?P<id>.*)/$', delete_own_comment, name='delete_own_comment'), 

をそして直接含むようにコメント/するlist.htmlを変更します。

{% if user.is_authenticated and comment.user == user %} 
    <a href="{% url 'delete_own_comment' comment.id %}">--delete this comment--</a> 
{% endif %} 
関連する問題