2014-03-31 58 views
1

我想用一個模板來加載站點名稱:訪問在setting.py變量從模板使用Django 1.4

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

任何人都可以指向正確的方向嗎?

+0

我以前的答案:http://stackoverflow.com/questions/433162/can-i-access-constants-in-settings-py-from-templates-in-django/7716141#7716141 –

回答

1

django.core.context_processors.request只將請求添加到上下文中,請參閱docs

撰寫您贏得背景處理器,這樣的:

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而不是明確導入您的設置文件。

0

不知道是什麼給了你這種印象。 request上下文處理器正如它在錫上所說的那樣:將請求添加到上下文處理器。沒有什麼說它會對SITE_NAME設置做任何事情 - 尤其是因爲這甚至不是標準設置。

如果您希望通過上下文處理器添加它,那麼您可以編寫自己的代碼 - 它只會是兩行代碼。