0

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

我正在使用 dbsettings 来定义站点级别的变量。在每个请求上,我都想检查我的站点级别变量之一,并根据该变量的值呈现不同的响应。

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

让我知道是否有办法在所有请求中“全球化”此功能。谢谢。

4

2 回答 2

1

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

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

from django.conf import settings

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

不要忘记将您的课程添加到您的 MIDDLEWARE_CLASSES 设置中。

于 2013-03-11T01:47:08.947 回答
0

您可以使用自定义模板上下文处理器将“全局”上下文传递给您的视图。

为此,请在应用程序的某处使用类似于以下示例的代码创建一个新的 contextprocessors.py(它所要做的就是返回一个 dict)。然后使用 settings.py 中的TEMPLATE_CONTEXT_PROCESSORS元组中的函数添加文件的路径(即:yourapp.contextprocessors.resource_urls)。

from django.conf import settings

def resource_urls(request):
    """Passes global values to templates."""

    return dict(
        TIME_ZONE = settings.TIME_ZONE,
    )

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

于 2013-03-11T01:38:13.013 回答