【问题标题】:Accessing variables in setting.py from templates with Django 1.4使用 Django 1.4 从模板访问 setting.py 中的变量
【发布时间】:2014-05-10 16:31:55
【问题描述】:

我想在模板中加载网站名称:

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

谁能指出我正确的方向?

【问题讨论】:

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


【解决方案1】:

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 而不是显式导入设置文件的好习惯。

【讨论】:

    【解决方案2】:

    不确定是什么给了您这样的印象。 request 上下文处理器完全按照它在 tin 上所说的:将 request 添加到上下文处理器。没有任何迹象表明它会对 SITE_NAME 设置产生任何影响 - 特别是因为它甚至不是标准设置。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-02
      • 2017-02-12
      • 2014-02-01
      • 2017-08-29
      • 1970-01-01
      • 2014-04-08
      • 2018-07-01
      相关资源
      最近更新 更多