2012-02-02 24 views
6

Planuję nowy projekt Django i chcę wszystko naprawić i tak dalej. Natknąłem się na pytanie, jak zorganizować układ katalogu projektu. Na szczęście istnieje wiele przykładów dobrych szablonów projektów dostępnych w Internecie. Mimo to jest jedna rzecz, o którą walczę, aby dostać się do mojej głowy:Lokalizacje szablonów i plików statycznych w Django

Jest to zalecany sposób umieszczania plików szablonów w oddzielnym katalogu w katalogu głównym projektu podzielonym na podkatalogi według aplikacji. Szablony nie znajdują się w katalogach aplikacji. Wydaje mi się to logiczne, ponieważ chcemy oddzielić logikę aplikacji od logiki reprezentacyjnej. Ale co z plikami statycznymi? W tym przypadku powszechną praktyką wydaje się lokalizowanie plików statycznych w katalogach aplikacji i ładowanie ich do katalogu "statycznego" w katalogu głównym projektu w czasie projektowania (collectstatic). I tej logiki nie rozumiem. Ponieważ pliki statyczne (tj. Js, css, obrazy) są zwykle dostępne w szablonach, a nie w kodzie aplikacji, zaliczam je do logiki prezentacji. Dlaczego więc nie są przechowywane tak jak szablony - katalog w katalogu głównym projektu, z podkatalogami dla pojedynczych aplikacji?

Wiem, że mogę przechowywać te pliki, gdziekolwiek chcę, ale myślę, że może istnieć dobry powód, dla którego ludzie robią to w ten sposób. Jaki może być ten powód?

Odpowiedz

8

Pliki statyczne można umieszczać w powiązanej aplikacji w taki sam sposób, jak szablony związane z konkretną aplikacją często umieszczane są w katalogu aplikacji.

Czasami ma to sens. Czasami tak nie jest - to twoja rozmowa.

Na przykład umieszczam moje statyczne pliki multimedialne w katalogu site_media (globalne pliki css, obrazy globalne itd.), Ale umieszczam określone media aplikacji w app/static. Na przykład, jeśli mam aplikację Poll, istnieje duża szansa, że ​​moje multimedia są potrzebne tylko w szablonach aplikacji ankiety, a nie w indeksie mojej witryny.

To samo dotyczy szablonów: umieszczam szablony globalne (base.html) w katalogu szablonów globalnych, ale szablony aplikacji są dostępne w wersji myapp/templates/myapp/foo.html.

Wreszcie ma szczególnie sensowne aplikacje do podłączania. Na przykład statyczne pliki django są przechowywane w aplikacji, ale stają się dostępne w katalogu plików statycznych, nawet jeśli aplikacja znajduje się w miejscu na ścieżce python. Wcześniej należało skopiować katalog multimediów lub dowiązanie symboliczne do niego.

Aplikacja statycznych plików naprawdę świeci, ponieważ pozwala uporządkować wszystkie pliki związane z aplikacją w jednym miejscu: folder aplikacji. collectstatic zajmuje się resztą i udostępnia ją w jednym miejscu dla serwera WWW.

+0

Widzę, że uporządkowanie szablonów i plików statycznych w katalogach aplikacji ma sens w przypadku aplikacji podłączanych. Ale nie mam żadnej korzyści, jeśli nie planuję tworzyć wtyczek, prawda? Po prostu będę musiał nazywać 'collectstatic' przy każdym wdrożeniu nowej wersji mojego projektu. – j0ker

+0

@ J0ker, to debata i jest całkowicie Twoim wezwaniem. Czasami, jeśli jest to dyskretnie zapakowana aplikacja, używam 'app/static'. Innym razem, dla grupy aplikacji, wszystkich związanych z podstawową witryną, używam tylko mojego folderu 'site_media'. Obciążenie wywołaniem "collectstatic" zostało usunięte, ponieważ używam skryptu tkaniny, który go używa. PLUS

5

Właściwie umieszczam szablony w katalogu dla każdej aplikacji i myślę, że to ma sens. Nadal masz separację separacji logicznej, ponieważ wszystko inne dzieje się w plikach Pythona.

Jednak umieszczenie katalogu szablonów w aplikacji oznacza, że ​​jeśli się okaże, że aplikacja jest przydatna dla innych projektów, możesz po prostu skopiować aplikację bezpośrednio do nowego projektu. Zawsze możesz przesłonić te szablony, tworząc alternatywne w folderze szablonów głównych.

Z tego powodu katalog statyczny powinien być również być przechowywane w katalogu app; umożliwia bardzo przejrzystą organizację zasobów w oparciu o to, co jest potrzebne dla konkretnej aplikacji i dlatego właśnie została utworzona aplikacja statycznych plików.