J'ai un filtre currency
, qui prend une valeur en USD et le convertit en une devise (USD ou GBP). La devise à convertir est stockée dans la session, mais les filtres ne prennent pas RequestContext
, donc je ne peux pas l'attraper directement à partir de là.Django - accéder au RequestContext à partir d'un filtre personnalisé
Existe-t-il un meilleur moyen que de passer l'élément de session pertinent dans le modèle, et du modèle dans le filtre en tant qu'argument? Bien que cette approche fonctionne, elle semble assez horrible, et je vais probablement passer la monnaie à (presque) tous les modèles.
Mon filtre ressemble actuellement quelque chose comme ceci:
def currency(value, currency):
if currency == 'usd':
val = '$%.2f' % value
return mark_safe(val)
d = Decimal(value)
val = '£%.2f' % (d*Decimal('0.63'))
return mark_safe(val)
@Adam - peut-être que je suis épais, mais je ne vois pas dans ces documents comment accéder aux variables de session à l'intérieur des balises de gabarit personnalisées. Pourriez-vous me donner un exemple ou signaler ce qui me manque? –
Ah - creuser autour semble être passé comme le premier argument à l'étiquette (juste trouvé un exemple qui ajoute une classe aux liens correspondant à une expression régulière, qui semble (a) utile et (b) adaptable - http: // gnuvince .wordpress.com/2007/09/14/a-django-template-tag-pour-la-page-courante-active /). –
À droite, le contexte est un paramètre standard de la méthode render sur le nœud de l'étiquette du modèle. Si vous avez besoin d'un autre exemple spécifique, je suis sûr que je pourrais en rassembler un. – Adam