我正在尝试构建一个Django TemplateLoader,但我无法让它“看到”当前的Context或Request,所以我无法真正做到这一点。
有谁知道如何让Django TemplateLoader这样做?
非常感谢
乔
答案 0 :(得分:1)
您可以在视图中查看有关模板的决策。在那里,您可以访问请求,并可以根据您喜欢的条件动态构建模板名称。如,
def my_view(request, ...):
...
template_name = 'template.html'
if is_mobile(request): template_name = 'mobile_' + template_name
template = get_template(template_name)
context = RequestContext(request, {...})
return HttpResponse(template.render(context))
您提供is_mobile()
的位置。更好的方法是提供一个获取请求和模板名称的方法,并返回一个经过适当修改的方法(以便您可以对该逻辑进行一次编码,而不是分散在多个视图中)。
您也可以从select_template()获得一些杠杆作用,它会获取候选模板名称列表,为找到的第一个模板返回一个模板。