仅从视图中呈现HTML?

时间:2013-05-18 09:12:34

标签: python django

目前render_to_response返回一个包含html的HttpResponse对象,但有没有办法只从模板,字典和视图请求中呈现HTML?

注意:我想这样做的原因是我可以将django视图彼此嵌套并以这种方式包含它们的值而不是包含via template includes

即:

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)

2 个答案:

答案 0 :(得分:0)

当然有:render_to_response是一个快捷方式,您始终可以直接在模板上调用渲染。 tutorial以及其他地方对此进行了描述。

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

但是,对于您的用例,我认为inclusion tags可能更合适。

答案 1 :(得分:0)

我想您可以使用django.template.loader.render_to_string生成“菜单”html。这将返回一个包含已评估HTML的字符串。

然后,在template.html中,您应该在评估safe模板变量时使用menu过滤器。

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