2010-02-11 7 views
2

je me trouver passe toujours une variable « utilisateur » à chaque appel à render_to_responserender_to_response toujours passer une variable

Beaucoup de mes rend ressemble à ceci

return render_to_response('some/template', {'my':context,'user':user}) 

est-il un moyen de automatiquement envoyer cette variable 'utilisateur' sans l'ajouter manuellement au contexte chaque fois qu'une méthode est appelée?

Répondre

11

D'abord, lisez this. Puis:

def some_view(request): 
    # ... 
    return render_to_response('my_template.html', 
          my_data_dictionary, 
          context_instance=RequestContext(request)) 
0

Vous voudrez peut-être regarder render_to, qui fait partie de django-ennuyeux - ce qui vous permet de faire des choses comme ceci:

@render_to('template.html') 
def foo(request):   
    bar = Bar.object.all() 
    return {'bar': bar}  

# equals to 
def foo(request): 
    bar = Bar.object.all() 
    return render_to_response('template.html', 
           {'bar': bar},  
           context_instance=RequestContext(request)) 

Vous pouvez écrire un décorateur similaire (par exemple render_with_user_to) qui enveloppe ça avec toi.

0

Le Dimitry est correct, mais vous pouvez encore simplifier cela en utilisant la vue générique direct_to_template comme fonction normale. Le code source est here.

Il y a aussi un joli add-on, django-annoying, qui fournit render_to un décorateur qui fait la même chose mais sans avoir besoin d'un rendu de template explicite.

2

Oui, vous pouvez le faire avec les processeurs Contexte: http://docs.djangoproject.com/en/dev/ref/templates/api/#id1

En fait, si vous incluez DJANGO.CORE.CONTEXT_PROCESSORS.AUTH dans vos processeurs de contexte, l'utilisateur est ajouté à chaque objet de la demande. http://docs.djangoproject.com/en/dev/ref/templates/api/#django-core-context-processors-auth

Vous devrez utiliser context_instance=RequestContext(request) comme d'autres l'ont mentionné pour utiliser les processeurs de contexte.

Questions connexes