2012-03-13 3 views
1

J'essayais de créer un formulaire dans mon tag de modèle personnalisé, puis d'y créer un formulaire HTML, puis de l'utiliser simplement dans mes modèles, mais la vérification CSRF échouait erreur, lorsque l'utilisateur soumet le formulaire (et il est naturel, parce que je ne l'ai pas fourni le formulaire dans l'étiquette de modèle avec csrf_token), je ne STH comme ceci:Vérification CSRF, Modèles In django

@register.simple_tag(takes_context=True) 
def change_password_(context): 
    csrf = context.get('csrf_token', '') 
    html = "<form action='{% url change_password %}' method='post' id='renew_password' >" 
    csrf_string = str(csrf) 
    html += "<input type='hidden' value='%' />" %csrf_string 
.... 

mais je reçois le CSRF Erreur de vérification a échoué :(aucune idée comment le faire fonctionner?
Merci

Répondre

2

Tout d'abord, essayez d'imprimer csrf dans le balise de template, ou vérifiez le html rendu pour vous assurer que la balise de template obtient avec succès le csrf_token du contexte du template. Deuxièmement, votre balise csrf n'a pas d'attribut de nom. Essayez ce qui suit:

html += "<input type='hidden' name='csrfmiddlewaretoken' value='%' />" %csrf_string 

Enfin, je considérerais l'écriture de votre étiquette de modèle en tant que inclusion tag. Cela va déplacer le code HTML vers un modèle distinct, qui sera plus net. Vous pouvez ensuite utiliser {% csrf_token %} dans le fichier de modèle du tag.

+0

Semble le problème était que l'attribut "nom", cela a fonctionné quand j'ai ajouté cela :) Merci –

-2

Vous avez besoin d'un {% csrf_token %} après l'étiquette de formulaire, au lieu de l'entrée cachée.

Lire this article pour plus d'informations.

+0

Je fais ceci à partir d'un TemplateTag, ce n'est pas un modèle (c'est le code de python) –

0

regardant une forme que je fait en utilisant tempates Je cet extrait:

<form action="" method="post"> 
<div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' 
value='e987effa0c6ee111225a3c0edc927b06' /></div><table> 

Peut-être qui vous donnera une idée de la façon de le mettre directement dans votre balisage

+0

hmm, comment cela pourrait-il être utile quand vous avez une valeur statique pour le jeton? – Jingo

+0

Bien sûr, mon jeton ne sert à rien au PO. J'ai juste utilisé mon extrait comme exemple puisque l'OP semblait savoir comment obtenir son propre jeton. –

+0

Ok, peu importe alors, on dirait que je me suis trompé ici. – Jingo

Questions connexes