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.