使用Django 1.4从模板访问settings.py中的变量

时间:2014-03-31 10:57:34

标签: python django django-class-based-views requestcontext

我想使用以下方法在模板中加载网站名称:

{{ 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'),

我无法访问SITE_NAME中的home/about.html,除非我专门将其添加到上下文变量中:

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 :(得分:2)

django.core.context_processors.request仅将请求添加到上下文中,请参阅docs

写下你的上下文处理器,例如:

from django.conf import settings    

def add_site_setting(request):
  return {'site_name': settings.SITE_NAME}

然后将该功能添加到settings.py

中的TEMPLATE_CONTEXT_PROCESSORS

此外,我建议使用from django.conf import settings而不是显式导入设置文件,这是一个好习惯。

答案 1 :(得分:0)

不确定是什么给了你这样的印象。 request上下文处理器完全按照它所说的那样执行:将请求添加到上下文处理器。没有任何内容表明它会对SITE_NAME设置做任何事情 - 特别是因为它甚至不是标准设置。

如果你想通过上下文处理器添加它,那么你可以编写自己的 - 它只是两行代码。