这是简化的代码示例,但可能有人知道问题发生的原因而没有代码的确切副本。所以:
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
更改为domain1
或foo
,则可行。
这怎么可能?是否有可能以某种方式覆盖了domain
名称gots,也许有些人有线索?
编辑更改get_context_view - > get_context_data(mistype)
EDIT2 我的域名'上下文变量被context_processor覆盖。当使用基于函数的视图时,一切正常。切换到基于类的视图后,'域'开始被覆盖。可能get_context_data()不够强吗?有没有办法阻止上下文处理器覆盖变量?
答案 0 :(得分:2)
是的,如果上下文处理器的某些或模板标记将domain
变量注入上下文中,则可能。
您确定方法被称为get_context_view
吗? Imho它应该是get_context_data
。
答案 1 :(得分:1)
TemplateView返回一个TemplateResponse,它已知用来自上下文处理器的数据覆盖传递给它的上下文。这是changing in Django 1.8与render
更加一致的内容。
您应该可以通过在视图上覆盖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)