Bonjour.
Ce que je veux implémenter maintenant, ce sont les paramètres de validation lors de l'enregistrement après la modification de la page. Je veux que le comportement lorsque le titre dépasse 33 caractères soit le même que le comportement lorsque le titre comporte 0 caractères.
Afin d'étudier la méthode d'implémentation, cette fois j'ai étudié le code de Wagtail. Article précédent
Wagtail est open source, donc si vous recherchez "Wagtail Github" sur le net, vous trouverez la page Wagtail's Github. Je veux savoir quel code est impliqué lors de l'enregistrement de la page, alors cherchons dans le code pour le moment.
De nombreux fichiers django.po sont touchés. Il s'agit d'un fichier permettant de convertir les mots utilisés dans la page dans une autre langue. Je ne pense pas que ce fichier soit profondément lié au contenu de cette époque, je vais donc l'ignorer.
wagtail / admin / views / pages.py semble suspect. Recherchez également le message d'erreur dans ce fichier pour savoir dans quelle fonction il est utilisé.
Apparemment, la fonction d'édition sur la ligne 323 ressemble à ça. Les fonctions de création et d'édition sont similaires. Comme vous pouvez le deviner à partir du nom, la fonction qui fonctionne lorsque la page est créée et lorsqu'elle est modifiée est différente. (semble si)
C'est là que le message d'erreur est écrit.
messages.validation_error(request, _("The page could not be saved due to validation errors"), form)
Si vous regardez l'instruction d'importation au début du fichier, les messages
from wagtail.admin import messages, signals
Vous pouvez voir qu'il s'agit de wagtail / admin / messages.py. Diverses fonctions sont écrites, mais il semble que le traitement passe à la fonction de rendu en général.
def render(message, buttons, detail=''):
return render_to_string('wagtailadmin/shared/messages.html', {
'message': message,
'buttons': buttons,
'detail': detail,
})
J'ai trouvé que je devais utiliser ces ** messages ** pour afficher la bannière (?) Message qui apparaît en haut de la page avec la bergeronnette.
Maintenant, introduisons la méthode des messages. La méthode que nous avons envisagée jusqu'à présent est de la valider lors de l'enregistrement avec la méthode save de models.py. Avec cette technique, vous pouvez définir si vous souhaitez enregistrer dans la base de données. Cependant, il semble difficile de gérer les messages d'erreur. Je voudrais utiliser des hooks cette fois pour obtenir un message d'erreur.
hooks est une fonction pratique propre à la bergeronnette, et il est possible d'exécuter un programme lorsqu'un événement spécifique se produit. Les hooks prennent également en charge avant et après la modification de l'objet Page, avant et après la création de l'objet Page, et ainsi de suite. Alors, essayons d'utiliser des crochets après que l'objet Page a été modifié.
from django.http import HttpResponse
from wagtail.core import hooks
from wagtail.admin import messages
@hooks.register('after_edit_page')
def after_edit_page(request, page):
is_title_length_valid = True if (len(page.title) > 0 | len(page.title) < 33) else False
if not is_title_length_valid:
messages.error(request, "Title Count Error")
def index(request):
return HttpReesponse("Hello, world.")
Le résultat de l'exécution ressemble à ceci.
http://localhost:8000/django-admin/wagtailcore/page/
Vous avez implémenté la validation de l'enregistrement de la base de données et les messages d'erreur.
Cela faisait un an que je le faisais en regardant l'enfant. ** -_- ** Il semble que vous puissiez écrire des articles avec MarkDown en bergeronnette, donc je pense que je vais essayer de l'implémenter.
Recommended Posts