目前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)
答案 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>