2010-01-31 7 views
3

J'ai un problème avec django CSRF middleware ... lorsque j'utilise la balise de modèle csrf_token je reçois cette sortie:CSRF Middleware - changement sortie csrf_token (xHTML de HTML)

<div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='6bda3605af31dd8595d2a67d0dda827b' /></div> 

mais je veux cette sortie (HTML non xHTML:

<div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='6bda3605af31dd8595d2a67d0dda827b'></div> 

I tryed pour voir le code django.middleware.csrf.CsrfViewMiddleware mais sans succès :(

Alors, comment puis-je changer la sortie fo CSRF _token tag?

réservoirs

+0

Veuillez noter que CSRFMiddleware est déprécié et sera supprimé dans Django 1.4. Voir http://docs.djangoproject.com/en/dev/releases/1.2-alpha-1/#csrf-protection pour plus de détails. – stefanw

Répondre

1

Vous devez aller modifier django.template.defaulttags.py: À la ligne 48, il y a la sortie de l'étiquette, et vous pouvez le modifier comme vous le souhaitez.

S'il vous plaît noter qu'il s'agit d'une fonctionnalité de développement, et en tant que telle, sujet à changement - mise à jour Django va probablement supprimer votre changement !.
En outre, s'il vous plaît prendre le temps d'aller look for a ticket sur ce problème particulier: la solution que j'ai proposé va probablement résoudre votre problème, mais je pense qu'un correctif "officiel" serait beaucoup plus agréable.

+0

ouais !!! Je n'ai pas trouvé ceci: '( cependant je vais créer un my_csrf_token donc quand je mettrai à jour django il sera facile de résoudre n'importe quel problème :) – patrick

3

Voici ma solution au problème.

{% with csrf_token as csrf_token_clean %}{{ csrf_token_clean }}{% endwith %} 

Dans votre modèle, cela ne remettre la clé de jeton, de sorte que vous pouvez écrire votre propre étiquette d'entrée HTML valide, comme celui-ci.

<input type="hidden" name="csrfmiddlewaretoken" value="{% with csrf_token as csrf_token_clean %}{{ csrf_token_clean }}{% endwith %}" > 

Source: http://www.phptodjango.com/2010/07/django-csrftoken-template-tag-fix.html

3

La solution est très simple:

<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}"> 

Il n'y a pas de point dans {% with %} construction.