Django - Comment afficher les messages en vertu de l'ajax fonction
Je suis en utilisant AjaxForm plugin pour soumettre mon formulaire sans actualisation. comme:
$('#my_form_id').ajaxForm(function(){
//something on success or fail
});
cela fonctionne correctement. lorsque je clique sur le bouton submit, il enregistre le formulaire de données sans actualisation. Mais avant cela, j'avais de django messages sur mon fichier de modèle comme:
{% for message in messages %}
<div id="notice" align="center">
{{ message }}
</div>
{% endfor %}
ce que ce code n'est l'affichage de notifications si le post correctement enregistrés, ou quelque chose a échoué.
maintenant; je ne peux pas le faire. je ne comprends pas comment je peux utiliser ces messages d'étiquettes avec des fonctions ajax.
il enregistre uniquement le post. pas de notifications.
merci.
edit :
add_post url : url(r'^admin/post/add/$', view='add_post',name='add_post'),
liées vue :
@login_required(login_url='/login/')
def add_post(request):
template_name = 'add.html'
owner = request.user
if request.method == "POST":
form = addForm(request.POST)
if form.is_valid():
titleform = form.cleaned_data['title']
bodyform = form.cleaned_data['body']
checkform = form.cleaned_data['isdraft']
n = Post(title=titleform, body=bodyform, isdraft=checkform, owner=owner)
n.save()
messages.add_message(request, messages.SUCCESS,
'New post created successfully!')
else:
messages.add_message(request, messages.WARNING,
'Please fill in all fields!')
else:
form = addForm()
return render_to_response(template_name, {'form': form, 'owner': owner,},
context_instance=RequestContext(request))
- Vous devez coller votre url et la vue.
- ajout d'url et de la vue.
Vous devez vous connecter pour publier un commentaire.
Ce sont les outils/méthodes qui m'a aidé à résoudre le problème. Tout d'abord, j'ai une aide de l'utilitaire de méthode appelée
render_to_json
:J'ai un
messages.html
modèle pour rendre le code html nécessaire pour le message(s):Lors de la création d'un message en réponse à une requête AJAX, j'utilise Django
render_to_string
pour l'emballage du message(s) dans une chaîne de caractères qui est stocké dans undata
dictionnaire, qui utilise ensuite monrender_to_json
pour retourner une réponse appropriée:Alors, dans mon jQuery
$.post(...)
fonction de rappel, je vérifie pour voir si leresponse
objet a unemsg
attribut, puis insérer le contenu deresponse.msg
dans les DOM où je veux qu'il doit être, avec jQuery transitions si vous le souhaitez. Monbase.html
le modèle contient le<ul>
conteneur pour les messages:Remarque que ci-dessus comprend les
messages.html
pour le cas où vous souhaitez afficher des messages sur une page réelle de la charge (non-requête AJAX) - il est vide si il n'y a pas de messages, mais le<ul>
est toujours disponible pour pousser AJAX-les messages reçus dans.La dernière pièce est la fonction Javascript (nécessite jQuery) - je utiliser en toute
$.post(...)
rappels pour afficher les messages:J'ai trouvé un moyen plus facile de le faire ici, j'ai pris quelques unes de ces idées et ce fut mon résultat:
Il vous suffit de créer vos messages comme toujours et avant l'envoi de la réponse que vous avez mis dans une liste des dicts:
Ensuite, vous ajoutez des données et de vos messages et de sérialiser, par exemple:
Enfin à votre ajax:
Et la update_messages fonction:
}
Il fonctionne parfaitement et je l'ai trouvé très facilement de mettre en œuvre
m.div_messages
variables de ne pas êtrem.level
etm.message
respectivement?message.level_tag
plutôt quemessage.level
?Voici une idée toute simple.
Ajouter un espace réservé pour vos messages layout.html, cela permet d'ajouter du nouveau messages en javascript:
Au lieu de:
Dans add.html, ajouter un autre comme:
Et ajaxForm ressemblerait à: