2015-09-20 64 views
0

我希望能夠擁有模板所在的動態目錄。讓我解釋我的意思。我有一個應用程序system至極有這樣一個文件結構:動態TEMPLATE_DIRS

\proj 
    __init__.py 
    settings.py 
    urls.py 
    ... 
\system 
    __init__.py 
    models.py 
    views.py 
    urls.py 
    \modules 
     \module_1 
      __init__.py 
      models.py 
      views.py 
      urls.py 
      \templates  ## Attention 
       one.html 
       two.html 
     \module_2 
      __init__.py 
      modules.py 
      \templates ## 
       three.html 
       four.html 
     ... 
     \module_N 
      ... 

正如你可以看到有一個modules文件夾,其中包含「原子」模塊,在某種意義上,他們擁有所有必要的文件,包括模板原子一個地方。因此,module_1有一個模板文件夾及其tempaltes,module_2有一個模板文件夾,所有其他模塊都有自己的模板文件夾。我想要的是能夠參考我的settings.py文件中的這些模板文件夾,以便當我將一個全新模塊上傳到模塊文件夾時,我不必更改此settings.py文件。所以我的問題是,我怎麼能動態地構建TEMPLATE_DIRS變量:

TEMPLATE_DIRS = (
    ## how to implement this??? 
) 

編輯

我考慮的另一種方法。首先,我的模塊轉換爲DINAMIC應用,如this

MODULES_DIR = 'system/modules' 

for item in os.listdir(MODULES_DIR): 
    if os.path.isdir(os.path.join(MODULES_DIR, item)): 
     app_name = 'system.modules.%s' % item 
     INSTALLED_APPS += (app_name,) 

然後做一些事情,使Django的尋找在所有的應用程序文件夾中的模板。但我不確定它是否會起作用,我該如何完成這項任務。

回答

1

這只是應用程序特定的模板,它已經在模板設置字典中被APP_DIRS flag照顧。不應該有任何其他配置需要。

+0

而我的建立INSTALLED_APPS的方法是否會動態工作? – Jacobian

+0

我懷疑這將取決於代碼何時運行;您可能會遇到啓動順序的困難。我必須說,雖然我不明白你爲什麼這樣做,如果您要將代碼添加到項目中,則將該代碼的應用程序名稱添加到INSTALLED_APPS是很簡單的。 –

+0

我不確定我是否理解文檔。如果我弄錯了,請你糾正我嗎?據我所知,我應該將所有模塊列在INSTALLED_APPS(靜態或動態,如果可能的話)。然後只需APP_DIRS = True。所有這些都應該在settings.py文件中完成。 – Jacobian