【问题标题】:Rendering only HTML from view?仅从视图中呈现 HTML?
【发布时间】:2013-05-13 10:03:07
【问题描述】:

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

注意:我想这样做的原因是我可以将 django 视图相互嵌套并以这种方式包含它们的值,而不是通过模板包含来包含

即:

menu.html:

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

我想要这个:

模板.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})

而不是:

模板.html

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

查看

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

【问题讨论】:

    标签: python django


    【解决方案1】:

    当然有:render_to_response是一个快捷方式,你可以直接在模板上调用render。这在tutorial 等地方都有描述。

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

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

    【讨论】:

    • 包含标签是否与常规变量模板一样高效?
    • 效率没有区别,都是一样的。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      • 2014-01-19
      相关资源
      最近更新 更多