问题
之前在分析Github上面的nitrate项目的template源代码时,发现在template里面引用了许多外部参数,但是无法找到参数来源。
分析
了解到了context processor这个设计,当时估计这些外部参数的来源极有可能是setting里面加入的某个context processor
结论
今天查看其中一个context processor,发现里面果真有许多被template引用的参数。
# -*- coding: utf-8 -*-
from django.conf import settings
def admin_prefix_processor(request):
"""
Django Admin URL Prefix RequestContext Handler
"""
return {'ADMIN_PREFIX': settings.ADMIN_PREFIX}
def auth_backend_processor(request):
"""Determine the be able to login/logout/register request """
from tcms.core.contrib.auth import get_using_backend
return {'AUTH_BACKEND': get_using_backend()}
def request_contents_processor(request):
"""
Django request contents RequestContext Handler
"""
return {'REQUEST_CONTENTS': request.REQUEST}
def settings_processor(request):
"""
Django settings RequestContext Handler
"""
return {'SETTINGS': settings}
一般processor的形式都是获取一个request,然后返回一个字典式的参数,而这里的用法表示,将参数分开在多个processor函数里面返回也是可以的,或者一个函数返回多个参数感觉效果也一样。