在应用模板中启用上下文处理器

时间:2016-06-11 20:02:51

标签: python django templates

我在Django项目中有一些带有自己模板的应用程序(例如/project/app1/template/project/app2/template等等。)

但是,模板上下文处理器(在主应用程序/项目的settings.py中定义)在这些应用程序模板中不可用。

我必须手动设置context_instance才能在子模板中启用上下文处理器(否则模板中缺少上下文处理器):

from django.template import RequestContext

def index(request):
    return render_to_response('index.html', {}, context_instance=RequestContext(request))

这是我的settings.py

PACKAGE_ROOT = os.path.abspath(os.path.dirname(__file__))
BASE_DIR = PACKAGE_ROOT


TEMPLATES = [
    {
       "DIRS": [
            os.path.join(PACKAGE_ROOT, "templates"),
        ],
        "APP_DIRS": True,

        "OPTIONS": {
            ...
            "context_processors": [
                "django.contrib.auth.context_processors.auth",
                "django.template.context_processors.request",
                ...
            ],
        },
    },
]

如何在不在每个视图功能中手动注入context_instance的情况下访问应用模板中的上下文处理器?

1 个答案:

答案 0 :(得分:1)

这与“app templates”没有任何关系;无论模板位于何处,行为都完全相同。

如果要运行上下文处理器,则总是需要RequestContext;除了其他任何东西,那是因为它们被传递了请求对象,所以它需要存在。

但是有一个创建该requestcontext的快捷方式,那就是render函数:

def index(request):
    return render(request, 'index.html', {})

请注意,这会将请求作为第一个参数。