2013-05-18 199 views
0

當前render_to_response返回一個包含html的HttpResponse對象,但是有沒有辦法僅從模板,字典和視圖中請求呈現HTML?僅從視圖渲染HTML?

注:我想這樣做的原因是這樣我就可以相互嵌套Django的意見,包括他們的價值觀這種方式,而不是包括通過模板包括

即:

menu.html:

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

我想這一點:

template.html:

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

視圖

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}) 

而不是:

template.html

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

視圖

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

回答

0

當然有:render_to_response是一個快捷方式,你可以始終直接在模板上調用渲染。這在tutorial和其他地方中有描述。

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

然而,對於您的使用情況下,我認爲inclusion tags可能是一個更好的選擇。

+0

是包含標籤與常規變量模板一樣高效嗎? – Derek

+0

效率沒有區別,它們的工作方式也是一樣。 –

0

我想你可以用django.template.loader.render_to_string來生成你的'menu'html。這將返回一個帶有評估HTML的字符串。

然後,在您的template.html中,應使用safe過濾器來消除menu模板變量。

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