django变量可用于所有视图

时间:2019-04-15 21:26:32

标签: python django django-views

使用context_processors可以很容易地定义一个可调用的结果,该变量可用于所有模板。有没有类似的技术可以使变量可用于所有视图?有可能吗?也许有一些解决方法?

Django:2.2 的Python:3.5.3

2 个答案:

答案 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)