在Django 1.4中从模板访问setting.py中的变量
我想在一个模板中加载网站名称,使用的是:
{{ SITE_NAME }}
在 setting.py
文件中,我有:
SITE_NAME = "MySite"
还有
from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS as TCP
TEMPLATE_CONTEXT_PROCESSORS = TCP + (
'django.core.context_processors.request',
)
我还在使用基于类的视图来加载我的视图(views.py
):
from django.views.generic import TemplateView
class MenuNavMixin(object):
def get_context_data(self, **kwargs):
context = super(MenuNavMixin, self).get_context_data(**kwargs)
return context
class AboutView(MenuNavMixin, TemplateView):
template_name = "home/about.html"
urls.py
:
url(r'^about/$', AboutView.as_view(), name='about'),
我无法在 home/about.html
中访问 SITE_NAME
,除非我特意把它添加到上下文变量中,像这样:
import mywebsite.settings
class MenuNavMixin(object):
def get_context_data(self, **kwargs):
context = super(MenuNavMixin, self).get_context_data(**kwargs)
context['SITE_NAME'] = mywebsite.settings.SITE_NAME
return context
我原以为如果我使用的是:
TEMPLATE_CONTEXT_PROCESSORS = TCP + (
'django.core.context_processors.request',
)
有没有人能给我指个方向?
2 个回答
0
我不太明白你为什么会有这样的想法。这个 request
上下文处理器就是按照字面意思来工作的:它会把 request 加入到上下文中。没有任何说明说它会处理 SITE_NAME 这个设置,特别是因为这根本就不是一个标准的设置。
如果你想让上下文处理器添加这个设置,你可以自己写一个,实际上只需要两行代码。
2
django.core.context_processors.request
这个东西只是把请求信息加到上下文中,具体可以查看文档。
你可以自己写一个上下文处理器,像这样:
from django.conf import settings
def add_site_setting(request):
return {'site_name': settings.SITE_NAME}
然后把这个函数添加到你的 TEMPLATE_CONTEXT_PROCESSORS
设置里,在 settings.py 文件中。
另外,我建议养成一个好习惯,就是用 from django.conf import settings
来引入设置,而不是直接导入你的设置文件。