在Django 1.4中从模板访问setting.py中的变量

1 投票
2 回答
1643 浏览
提问于 2025-04-18 00:39

我想在一个模板中加载网站名称,使用的是:

{{ 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 来引入设置,而不是直接导入你的设置文件。

撰写回答