只是在这里寻找一些关于如何在“Django 时尚”中实现这个概念的指导。
我正在使用 dbsettings 来定义站点级别的变量。在每个请求上,我都想检查我的站点级别变量之一,并根据该变量的值呈现不同的响应。
现在我意识到我可以通过在我的每个视图函数中添加一个简单的 if 语句来轻松实现这一点,但我认为可能有一种方法可以在更高级别上应用它?
让我知道是否有办法在所有请求中“全球化”此功能。谢谢。
只是在这里寻找一些关于如何在“Django 时尚”中实现这个概念的指导。
我正在使用 dbsettings 来定义站点级别的变量。在每个请求上,我都想检查我的站点级别变量之一,并根据该变量的值呈现不同的响应。
现在我意识到我可以通过在我的每个视图函数中添加一个简单的 if 语句来轻松实现这一点,但我认为可能有一种方法可以在更高级别上应用它?
让我知道是否有办法在所有请求中“全球化”此功能。谢谢。
实际上,您真正想要的是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 设置中。
您可以使用自定义模板上下文处理器将“全局”上下文传递给您的视图。
为此,请在应用程序的某处使用类似于以下示例的代码创建一个新的 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 }}
.