我想使用以下方法在模板中加载网站名称:
{{ 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',
)
有人能指出我正确的方向吗?
答案 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设置做任何事情 - 特别是因为它甚至不是标准设置。
如果你想通过上下文处理器添加它,那么你可以编写自己的 - 它只是两行代码。