Django视图预处理

Django视图预处理,django,django-views,Django,Django Views,只是想在这里找到一些关于如何在“Django时尚”中实现这一概念的指导 我使用dbsettings来定义站点级变量。在每个请求中,我希望检查一个站点级变量,并根据该变量的值呈现不同的响应 现在我意识到,只要在每个视图函数中添加一个简单的if语句,我就可以轻松地实现这一点,但我认为有一种方法可以在更高的级别上应用它 让我知道是否有一种方法可以跨所有请求“全球化”此功能。谢谢。您可以使用自定义将“全局”上下文传递给视图 要实现这一点,请在应用程序中的某个地方创建一个新的contextprocesso

只是想在这里找到一些关于如何在“Django时尚”中实现这一概念的指导

我使用dbsettings来定义站点级变量。在每个请求中,我希望检查一个站点级变量,并根据该变量的值呈现不同的响应

现在我意识到,只要在每个视图函数中添加一个简单的if语句,我就可以轻松地实现这一点,但我认为有一种方法可以在更高的级别上应用它

让我知道是否有一种方法可以跨所有请求“全球化”此功能。谢谢。

您可以使用自定义将“全局”上下文传递给视图

要实现这一点,请在应用程序中的某个地方创建一个新的contextprocessors.py,代码类似于下面的示例(它所要做的就是返回一个dict)。然后使用settings.py(即:yourapp.contextprocessors.resource\u url)中的TEMPLATE\u CONTEXT\u PROCESSORS元组中的函数将路径添加到文件中


现在,您可以按预期在模板中引用这些键:
{{TIME_ZONE}

实际上,您真正想要的可能是,如果设置将影响首先选择的模板,或者实质上影响响应。它比使用模板上下文处理器灵活得多,如果您只想向上下文中添加几个变量,则使用模板上下文处理器更合适

您可以在应用程序中创建middleware.py,其中可能包含以下内容:

from django.conf import settings

class MyMiddleware(object):
    def process_request(self, request):
        request.my_app_setting = settings.MY_APP_SETTING

别忘了将类添加到中间件类设置中。

您对自定义视图装饰器有何想法?我觉得似乎不那么枯燥。你可以对此持保留态度,但我个人会在装饰师不是完全必要的时候避免他们。我喜欢他们,他们是一个非常强大的工具,但他们也可以使代码更加神秘。我看到一个,我想,现在这个函数可以变成太阳底下的任何东西。另一方面,中间件在目的上更局限于几乎完全属于您的问题,缺点是有点“神奇”。但是很清楚,随机请求属性几乎必须来自中间件。有了这个middlewhere解决方案,我看不出你在这里有什么优势。在视图中,我仍然需要检查request.my_app_设置,然后适当重定向no?或者,我可以检查此MyMiddleware对象中request.my_app_设置的值,并相应地重定向吗?区别在于并非每个视图都有相同的装饰器。如果使用装饰器填充视图的一个参数,仍然需要使用
If
检查它。我不确定您的具体情况,但是如果重定向是相同的(或者至少是可计算的),如果您的设置是某个变量,那么您可以让中间件直接返回响应。那会非常干燥。
from django.conf import settings

class MyMiddleware(object):
    def process_request(self, request):
        request.my_app_setting = settings.MY_APP_SETTING