Трясогузка для комментариев

У нас есть сайт, похожий на блог о трясогузках, и мы хотели бы добавлять комментарии к нашим типам сообщений. Каждое сообщение является page объектом.

Мы подумали об использовании django-contrib-comments или реализации собственного простого приложения комментариев django с ajax.

Но каков будет «всеобщий подход к трясогузке» для создания комментариев на общедоступном сайте трясогузки (только для зарегистрированных пользователей трясогузки, использующих ajax)?

Мы не ищем полной реализации, нам просто нужны некоторые подсказки или подсказки для разумного подхода к трясогузкам.

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


# blog/models.py

class PostPage(RoutablePageMixin, Page):
    ...field definitions...

    @route(r'^comment/new/$')
    def add_comment_to_post(self, request):
        from .forms import CommentForm

        if request.method == 'POST':
            form = CommentForm(request.POST)
            if form.is_valid():
                comment = form.save()
                return render(request, self.template, {
                    'page': self,
                    'comment': comment,
                })
        else:
            form = CommentForm()

        return render(request, self.template, {
            'page': self,
            'form': form,
        })
    content_panels = Page.content_panels + [
        ...FieldPanels...
        InlinePanel('comments', label="Comments"),
    ]

class Comment(models.Model):
    text = models.TextField()

    panels = [FieldPanel('text'),]

    def __str__(self):
        return self.text

    class Meta:
        abstract = True


class PostPageComments(Orderable, Comment):
    page = ParentalKey('PostPage', related_name='comments')

# blog/forms.py
from django import forms
from .models import PostPageComments


class CommentForm(forms.ModelForm):

    class Meta:
        model = PostPageComments
        fields = ['text']

# blog/templates/blog/post_page.html

{% extends "core/base.html" %}
{% load wagtailcore_tags %}

{% block content %}

    {% include 'stream/includes/post_list_item.html' with include_context="post_detail_page" post=self %}

    <h3>New comment</h3>
    <form method="post" action="comment/new/" id="comment-new">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit" class="save btn btn-default">Send</button>
    </form>

{% endblock %}

Но: form ({{ form.as_p }}) не визуализируется - есть подсказки? Администратор django для PostPageComments работает как положено.


person tombreit    schedule 11.12.2016    source источник
comment
Поскольку страницы трясогузки являются моделями django, я не вижу проблем с django-contrib-comments.   -  person dahrens    schedule 30.12.2016
comment
Использование django-contrib-comments(-xtd) было бы моим последним средством, но я действительно хочу попробовать его с чистой трясогузкой и джанго. Поэтому я обновил свой вопрос, чтобы показать свою фактическую реализацию.   -  person tombreit    schedule 30.12.2016


Ответы (1)


Некоторые незначительные изменения в моей модели и шаблоне, и у меня есть простая форма комментариев (неупомянутый код не изменился по отношению к вопросу; несвязанный код опущен для краткости):

# blog/models.py
class PostPage(Page):

    def serve(self, request):    
        from .forms import CommentForm

        if request.method == 'POST':
            form = CommentForm(request.POST)

            if form.is_valid():
                comment = form.save(commit=False)
                comment.page_id = self.id
                comment.save()
                return redirect(self.url)
        else:
            form = CommentForm()

        return render(request, self.template, {
            'page': self,
            'form': form,
        })

class Comment(models.Model):
    text = models.TextField()

    class Meta:
        abstract = True

class PostPageComments(Orderable, Comment):
    page = ParentalKey('PostPage', related_name='comments')

# blog/templates/blog/post_page.html

<form method="post" id="comment-new">
    {% csrf_token %}
    {{ form.as_p }}     
    <button type="submit">Send</button>
</form>
person tombreit    schedule 02.01.2017