2011-03-14 46 views
1

此編碼是否正確?Django:如何擴展settings.py?

from django.conf import settings 
settings.TEMPLATE_CONTEXT_PROCESSORS += ['portal.context_processors.login_form_processor'] 

我想要一個更大的價值添加到項目設置的字典裏,僅僅是出於一個應用程序=)

回答

1

你應該導入本地設置模塊

import settings 
settings.TEMPLATE_CONTEXT_PROCESSORS += ['portal.context_processors.login_form_processor'] 
+0

不要忘了,TEMPLATE_CONTEXT_PROCESSORS「命令敏感」http://docs.djangoproject.com/en/dev/ref/settings/#template-context-processors – H1D 2011-03-14 19:00:13

+0

我給的代碼不工作= /你是一塊代碼是相同的 – holms 2011-03-14 21:55:00

+0

看你的第一行,然後在我的。他們是不同的 – H1D 2011-03-15 01:07:10

0

這取決於無論您的TEMPLATE_CONTEXT_PROCESSORS已經是列表還是元組。如果它是一個列表,那麼這將工作,如果它是一個元組,那麼你會得到一個關於試圖添加列表和元組在一起的錯誤。

你可以做,以確保它的工作原理...

from django.conf import settings 
tpl_ctx_prcs = list(settings.TEMPLATE_CONTEXT_PROCESSORS) 
tpl_ctx_prcs.append('portal.context_processors.login_form_processor') 
settings.TEMPLATE_CONTEXT_PROCESSORS = tuple(tpl_ctx_prcs) 

但這是否真正你想要做什麼就做 - 即添加模板,背景處理器,使得它實際上get的調用取決於你在哪裏和什麼時候這樣做。

是否有任何理由不將其添加到您的settings.py文件中?即使您只需要單個應用程序中的額外上下文,也不會讓它出現在其他應用程序中。

+0

當你將django包作爲獨立的應用程序,你需要要讓你自己的關鍵設置像context_processor,你會要求用戶修改他的設置?我懷疑... – holms 2011-03-14 21:52:38

1

你可以有一個「標準設置」,可以在你的項目中,settings.py導入這個設置方法如下:

在您的標準設置:

# settings_standard.py 
TEMPLATE_CONTEXT_PROCESSORS = (
    'context_one', 
    'context_two' 
) 

並在您的項目設置:

# project settings.py 
import settings_standard.py 

TEMPLATE_CONTEXT_PROCESSORS += (
    'context_three', 
    'context_four' 
) 

注意+ =第二個TEMPLATE_CONTEXT_PROCESSORS。 :)