仅针对特定应用的上下文处理器

时间:2016-01-27 12:04:25

标签: python django

'context_processors': [
    ...
    ...
    "publicfront.views.context_processors.add_event_url"
 ],

我在settings.py中添加了此上下文处理器,并且只想用于特定应用。我怎么能做到这一点?

2 个答案:

答案 0 :(得分:2)

为所有请求运行上下文处理器。

如果你需要模仿你所说的功能,那么你可以在上下文处理器函数中添加一些if / else条件,它将请求对象作为第一个参数,这样你就可以确定哪个应用程序正在运行并填充返回的相应的词典

答案 1 :(得分:0)

到目前为止,我找到的大多数答案都是关于在网站的context_processors中添加settings.py。但是我希望我的应用程序成为一个独立的开发部门。在部署时,我不想在站点上执行本应包含在发行版中的不必要的调整。正如上面已经由Daniel Roseman暗示的那样,我们可以使用自定义标签(doc):

# file `extras.py`
from django.template.defaultfilters import register
import platform

CURRENT_OS = platform.system()


@register.simple_tag
def current_os():
    return CURRENT_OS

可以这样使用:

{% load extras %}
. . .
<div>{% current_os %}</div>

由于request对象可在模板中访问,因此可以使用自定义过滤器(doc)进行处理,如下所示:

# file `extras.py`
@register.filter
def my_filter(req):
    return req.GET.get('q')

用法:

<div>You searched for '{{ request|my_filter }}'.</div>