如何让Django TemplateLoader看到当前的Context或Request?

时间:2010-05-15 19:28:13

标签: django django-templates request

我正在尝试构建一个Django TemplateLoader,但我无法让它“看到”当前的Context或Request,所以我无法真正做到这一点。

有谁知道如何让Django TemplateLoader这样做?

非常感谢

1 个答案:

答案 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()获得一些杠杆作用,它会获取候选模板名称列表,为找到的第一个模板返回一个模板。