1

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

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

谁能指出我正确的方向?

4

2 回答 2

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另外,我建议养成使用而不是显式导入设置文件的好习惯。

于 2014-03-31T11:15:21.103 回答
0

不知道是什么给了你这样的印象。request上下文处理器完全按照它在罐子上所说的做:将请求添加到上下文处理器。没有什么可以说它会对 SITE_NAME 设置做任何事情 - 特别是因为它甚至不是标准设置。

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

于 2014-03-31T11:03:33.893 回答