2011-02-05 13 views
1

不要誤解我的意思,我不是在將我的HTML放在settings.py文件旁邊,而是在TEMPLATE_DIR列表中添加項目目錄(它包含settings.py文件),以便我可以調用任何通過命名它的模板'app/template/file.html'在Django中使用項目dir作爲模板目錄是不是一個好主意?

我只是想知道爲什麼Django沒有模板名稱空間。它迫使你要麼:

  1. 創建一個模板目錄與所有應用程序分開,然後爲每個應用程序創建一個目錄,並把你的HTML。
  2. 在每個應用程序目錄中創建一個模板目錄,並使用應用程序名稱在其中創建另一個目錄,然後將HTML放入其中。

這是不理想的,因爲:

  1. 迫使你有你的應用程序之外的HTML。非常適合可插拔。
  2. 通過強制您創建冗餘目錄樹project_dir/app_name/template/appname違反了DRY,否則,如果您有幾個名爲'index.html'的模板,那麼您就被搞砸了。

因此,將項目目錄定義爲模板目錄以調用所有模板文件'app_name/template/file.html'是不好主意?如果是,爲什麼?你會如何幹淨地做到這一點?

回答

0

我個人使用app_name/templates作爲應用相關模板,使用projects/templates作爲全局模板。我個人覺得這很有用,因爲我真的很喜歡我的應用程序和我的項目之間的鬆散耦合,所以我傾向於讓它們分離。

不過django給你選擇的自由。如果你對自己的選擇感覺不錯,我根本沒有看到任何問題。

+2

你用`app_directories`模板加載器我假設?這樣做的問題是,除非您將應用程序的模板放在`app_name/templates/app_name`中,否則模板加載器會將該應用程序的模板視爲在根中。因此,例如,要使用`my_app`的`home.html`模板,您必須將其引用爲`home.html`,而不是`app_name/home.html`。 – 2011-02-06 03:25:01

+0

正確。如果沒有`app/temp/app`方案,名稱衝突很容易,除非您努力以不同的方式命名每個應用程序模板,或者您可以確保您的`generic.html`模板存在於您的應用程序中並且將首先加載。但是,如果這就是你滾動的方式,那麼沒有任何傷害這有點像強類型和弱類型的爭論。 – 2011-02-06 05:24:51

0

您對app_directories模板加載器的工作方式提出了一個有趣的觀點。除了使用模板污染應用程序的根目錄之外,我無法想到因此而出現問題。

也許值得研究一下製作自己的模板加載器嗎?

相關問題