Django get_context_data()变量在某处被覆盖

时间:2015-01-22 12:37:07

标签: python django

这是简化的代码示例,但可能有人知道问题发生的原因而没有代码的确切副本。所以:

class FooView(TemplateView):
  template_name = 'foo.html'

  def get_context_data(self, **kwargs)
    context = super(FooView, self).get_context_data(**kwargs)
    ...
    # here we get link to domain
    ...
    args = {'domain': domain}
    context.update(args)

    import pdb; pdb.set_trace() # here 'domain' has a value
    return context

html模板foo.html尝试访问'域'值为{{ domain }},但为无。

只有在我使用'域'作为标签。因此,如果我将domain更改为domain1foo,则可行。

这怎么可能?是否有可能以某种方式覆盖了domain名称gots,也许有些人有线索?

编辑更改get_context_view - > get_context_data(mistype)

EDIT2 我的域名'上下文变量被context_processor覆盖。当使用基于函数的视图时,一切正常。切换到基于类的视图后,'域'开始被覆盖。可能get_context_data()不够吗?有没有办法阻止上下文处理器覆盖变量?

2 个答案:

答案 0 :(得分:2)

是的,如果上下文处理器的某些或模板标记将domain变量注入上下文中,则可能。

您确定方法被称为get_context_view吗? Imho它应该是get_context_data

答案 1 :(得分:1)

TemplateView返回一个TemplateResponse,它已知用来自上下文处理器的数据覆盖传递给它的上下文。这是changing in Django 1.8render更加一致的内容。

您应该可以通过在视图上覆盖render_to_response来解决此问题:

from django.shortcuts import render

...

class FooView(TemplateView):
    def render_to_response(self, context, **response_kwargs):
        return render(self.request, self.get_template_names()[0], context)