2013-05-18 2 views
0

Actuellement, render_to_response renvoie un objet HttpResponse contenant le html, mais est-il possible de ne restituer que le code HTML d'un modèle, d'un dictionnaire et d'une requête d'une vue?Rendre uniquement le HTML de la vue?

Note: la raison pour laquelle je veux faire est que je puisse nicher vue django dans l'autre et inclure leurs valeurs ainsi au lieu d'inclure par modèle comprend

ie:

menu.html:

<div>menu {{ text }}</div> 

Je veux ceci:

template.html:

<div >...{{ menu }} </div> 

vue

def menu(request, ...): 
    # do menu variable calculations here 
    # returned html string rendered from template, request, kwargs, and variables  

def base(request, ...): 
    menu = menu(request, ...) # rendered html for menu values 
    render_to_response("template.html", context={"menu":menu}) 

plutôt que:

template.html

<div>{% include menu.html %}</div> 

vue

def base(request, ...): 
    # calculate menu variable values here 
    render_to_response("template.html", context=dictionary_of_menu_items) 

Répondre

0

Bien sûr, il y a: render_to_response est un raccourci, et vous peut toujours appeler render directement sur le template. Ceci est décrit dans le tutorial, entre autres.

template = loader.get_template('template.html') 
context = Context(dictionary_of_items) 
rendered = template.render(context) 

Cependant, pour votre cas d'utilisation, je pense que inclusion tags sont probablement un meilleur ajustement.

+0

sont des balises d'inclusion aussi efficaces que la modélisation de variables régulières? – Derek

+0

Il n'y a pas de différence d'efficacité, ils fonctionnent de la même manière. –

0

Je suppose que vous pouvez utiliser django.template.loader.render_to_string pour générer votre code html 'menu'. Cela vous renverra une chaîne avec le HTML évalué.

Puis, dans votre template.html, vous devez utiliser le filtre safe lors de l'évaluation de votre variable de modèle menu.

<div>{{menu|safe}}</div> 
Questions connexes