Django - 手动构建HttpResponse,但也想使用模板

4 投票
2 回答
5603 浏览
提问于 2025-04-17 23:26

当你用 render_to_response 返回一个 HttpResponse 对象时,你可以指定一个模板,它会使用这个模板,并把你在模板中设置的所有 {{ 变量 }} 填进去。

如果我想手动构建我的 HttpResponse 对象,是否还可以使用我模板目录中的某个模板呢?

2 个回答

1

没错,你可以使用Django的模板加载器来加载你的模板,这样就能得到一个Template对象。接着,你可以把它渲染成字符串,然后把这个字符串传给HttpResponse

from django.template import Template, Context
from django.template.loader import get_template

def my_view(request):
    temp = get_template('/path/to/template.html')
    result = temp.render(Context({'context': 'here'})
    return HttpResponse(result)

编辑

刚注意到@falsetru上面的回答——那可能是个更好更简短的方法!

13

使用 render_to_string,你会得到一个渲染好的字符串。你可以把这个返回的字符串传给 HttpResponse

from django.template.loader import render_to_string

...

rendered = render_to_string('my_template.html', {'foo': 'bar'})
response = HttpResponse(rendered)

撰写回答