2009-04-22 13 views
3

J'ai besoin de définir les formes de Django.ChoiceField pour afficher les symboles monétaires. Puisque les formes django échappent à tous les caractères HTML ASCII, je ne peux pas obtenir le & # 36; () ou la livre &; (£) pour afficher le symbole de devise. Pourriez-vous suggérer des méthodes pour afficher le caractère réel de devise HTML au moins pour la partie valeur de l'option?Valeurs de formulaire Django sans échappement HTML

<select name="currency" id="id_currency"> 
    <option value="&amp;#36;">$</option> 
    <option value="&amp;pound;">£</option> 
    <option value="&amp;euro;">€</option> 
</select> 

Mise à jour: S'il vous plaît noter que j'utilise Django 0.96 que mon application est en cours d'exécution sur Google App Engine.
Et le <SELECT> ci-dessus est rendu à l'aide de formulaires Django.

currencies = (('&#36;', '&#36;'), 
       ('&pound;', '&pound;'), 
       ('&euro;', '&euro;'))  
currency = forms.ChoiceField(choices=currencies, required=False) 

Merci,
Arun.

+0

Utilisez-vous une coutume modèle ou utilisez le django-admin? –

+0

J'utilise un modèle personnalisé. – asp

+0

L'autre façon est d'utiliser unicode u '\ u20AC' – ccsakuweb

Répondre

8

Vous pouvez utiliser « safe » dans le modèle ou « mark_safe » dans la vue, désactiver autoescaping dans le modèle, ou utiliser des caractères Unicode plutôt que des entités HTML dans votre formulaire.

En utilisant mark_safe

from django.utils.safestring import mark_safe 

currencies = ((mark_safe('&#36;'), mark_safe('&#36;')), 
       (mark_safe('&pound;'), mark_safe('&pound;')), 
       (mark_safe('&euro;'), mark_safe('&euro;')))  

En utilisant autoescape off

Comme alternative dans votre modèle, vous pouvez turn off escaping for a block of code. Tout entre les étiquettes {% autoescape off %} et {% endautoescape %} ne sera pas échappé.

Utilisation des caractères Unicode

Quand rien ne fonctionne essayez ce qui suit. Dans le fichier qui contient vos devises tuple mis la ligne suivante comme première ou deuxième ligne:

# coding=utf-8 

puis dans vos devises tuple mettre les caractères unicode réels:

currencies = (('$', '$'), 
       ('£', '£'), 
       ('€', '€')) 
+0

Salut, Merci pour la réponse rapide. Mais je ne sais pas comment cela peut être appliqué dans le cas de django Forms. Ajouter: J'aurais dû mentionner que j'utilise Django 0.96 lorsque mon application fonctionne sur Google App Engine. – asp

+0

Salut, Merci encore pour la réponse. J'utilise Django 0.96 lorsque mon application fonctionne sur Google App Engine. Autant que je peux comprendre django.utils.safestring a été introduit après 0,96 – asp

+0

Salut, Merci pour cela. Mais encore une fois le problème sera la version de Django J'utilise 0.96. Je pense que seul Django 1.0 a la balise "autoescape". C'est comme ça que j'aurais aimé avoir Django 1.0. Mais changer la version maintenant sera très lourd, puisque je suis dans Google App Engine. – asp

Questions connexes