2010-11-13 26 views
1

Dans mon modèle « racine » J'ai quelque chose comme çavues django.contrib.auth et modèle vars

{% if special %} 
some_special_html 
{% endif %} 

Le modèle special var est inséré dans le modèle par certaines vues.

Le problème est que j'ai besoin de la vue password_change pour définir le special modèle var.

Quelle est la meilleure façon d'aborder cela?

Actuellement, la vue password_change est appelé directement à partir urls.py:

url(r'^change_password/$', 'django.contrib.auth.views.password_change', 
    {'template_name': 'profile/password_change.html'}, 
    name='password_change'), 

Répondre

3

Depuis au moins Django 1.3, la vue password_change prend un contexte supplémentaire, bien que la documentation ne le mentionne pas.

Vous pouvez transmettre des arguments de mots-clés supplémentaires pour une vue en utilisant l'argument kwargs de la fonction url, afin d'obtenir le contexte supplémentaire dans, faire quelque chose comme ceci:

url(r'^password/change/$', 
    auth_views.password_change, 
    {'template_name': 'profile/password_change.html'}, 
    name='password_change', 
    kwargs=dict(extra_context={'special': 'special'}), 
    ), 
0

Soit déplacer votre traitement du special var dans un context_processor, ou tout simplement envelopper la vue password_change auth avec votre propre point de vue qui passe le bon contexte.

+0

ok, je l'ai enveloppé la vue, mais ne sais pas comment "passer le bon contexte" – frnhr

+0

'password_change' ne prend pas de contexte supplémentaire. Il instancie un 'RequestContext' cependant. –

+0

@Ignacio: Vous avez raison. @Cek: Je voudrais juste copier l'intégralité du code de la vue et apporter les modifications dont vous avez besoin. – sdolan