Как предоставить кнопку удаления для встроенного в комментарии фреймворка django - PullRequest
1 голос
/ 07 января 2012

Я использую каркас комментариев django. В нем говорится, что он обеспечивает большую функциональность, и я также вижу в исходных файлах, что есть различные варианты, но документация немного скудна.

Есть две проблемы

  1. Я хочу предоставить delete button для каждого публикуемого комментария, и я не хочу перенаправлять пользователя на другую страницу. Я просто хочу, чтобы комментарий был удален с подтверждением. Я не нашел никакой документации, которая говорит мне, как я могу сделать это в django comments framework
  2. Если есть error while submitting the comment form, пользователь redirected to the preview page (который также обрабатывает ошибки), я не хочу этого. Я хочу, чтобы пользователь был перенаправлен на ту же страницу с соответствующими ошибками. Как я могу сделать это.

Любая помощь или направление приветствуется

Ответы [ 2 ]

3 голосов
/ 05 апреля 2014

В фрагменте кода Тимми для представления все еще отсутствовал один оператор импорта, и он не возвращал ответ. Вот тот же код, обновленный до теперь внешнего приложения django_comments (django 1.6 +):

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())

Это перенаправит обратно на исходную страницу без какого-либо сообщения (но, по-видимому, без одного комментария).

Зарегистрируйте URL для этого просмотра:

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

А затем напрямую измените comments / list.html, чтобы он содержал:

{% if user.is_authenticated and comment.user == user %}
   <a href="{% url 'delete_own_comment' comment.id %}">--delete this comment--</a>
{% endif %}
2 голосов
/ 08 января 2012

Представление для комментариев уже удалено, но оно является частью системы модерации. Вам необходимо разрешить всем пользователям разрешение 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 %}

Для второй проблемы, , вы можете видеть, что перенаправление всегда будет происходить, если есть ошибки (даже если установлен предпросмотр = False). Существует не так много обходных путей. Вы можете создать свой собственный вид, который обернет вид post_comment (или просто написать свой собственный post_comment без перенаправления)

...