使用context_processors可以很容易地定义一个可调用的结果,该变量可用于所有模板。有没有类似的技术可以使变量可用于所有视图?有可能吗?也许有一些解决方法?
Django:2.2 的Python:3.5.3
。
答案 0 :(得分:1)
您可能要实现自定义中间件。
https://docs.djangoproject.com/en/dev/topics/http/middleware/
这使您可以为每个请求执行自定义代码,并将结果附加到request
对象,然后可以在视图中访问该对象。
答案 1 :(得分:0)
您可以尝试通过拥有父类并从中继承所有视图来将变量发送到每个基于类的视图的上下文。
class MyMixin(object):
def get_context_data(self, **kwargs):
context = super(MyMixin, self).get_context_data(**kwargs)
myvariable = "myvariable"
context['variable'] = myvariable
return context
# then you can inherit any kind of view from this class.
class MyListView(MyMixin, ListView):
def get_context_data(self, **kwargs):
context = super(MyListView, self).get_context_data(**kwargs)
... #additions to context(if any)
return context
或者,如果您使用的是基于函数的视图,则可以使用单独的函数来更新上下文dict
。
def update_context(context): #you can pass the request object here if you need
myvariable = "myvariable"
context.update({"myvariable": myvariable})
return context
def myrequest(request):
...
context = {
'blah': blah
}
new_context = update_context(context)
return render(request, "app/index.html", new_context)