4 votes

Wagtail-approche pour les commentaires

Nous avons un site wagtail de type blog et nous aimerions ajouter des commentaires à nos types de messages. Chaque article est un page objet.

Nous avons pensé à utiliser django-contrib-comments ou mettre en œuvre une application de commentaires django avec ajax.

Mais quelle serait l'approche "tout wagtail" pour avoir une fonctionnalité de commentaire sur le site public de wagtail (uniquement pour les utilisateurs wagtail connectés, en utilisant ajax) ?

Nous ne sommes pas à la recherche d'une mise en œuvre complète, nous avons juste besoin de quelques conseils ou astuces pour une approche raisonnable.

Notre approche actuelle consiste à rendre les commentaires disponibles dans l'administration de wagtail en tant qu'élément d'information. InlinePanel sur chaque PostPage . Mais nous avons du mal à rendre un formulaire django pour ajouter de nouveaux commentaires sur le frontend :


# 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 %}

Mais : Le site form ( {{ form.as_p }} ) n'est pas rendu - un indice ? Une administration django pour PostPageComments fonctionne comme prévu.

2voto

tombreit Points 308

Quelques changements mineurs à mon modèle et à mon gabarit et j'ai mon formulaire de commentaire simple (le code non mentionné est inchangé par rapport à la question ; le code sans rapport est omis pour des raisons de brièveté) :

# 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>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X