Jak używać CSS w Django?

110

Tworzę aplikację za pomocą Django i zastanawiam się, jak sprawić, by Django użyło mojego pliku CSS? Jakie ustawienia muszę zrobić, aby Django zobaczyło plik css?

Uwaga: na komputerze lokalnym

gath
źródło

Odpowiedzi:

48

Jeśli używasz serwera deweloperskiego, postępuj zgodnie z instrukcją zarządzania plikami statycznymi projektu django, aby skonfigurować adresy URL, a następnie odwołaj się do plików multimedialnych w szablonie - powiedzmy, do obrazu w folderze obrazu z programu /site_media/images/foo.gif.

Joe
źródło
25
Krótka notatka na temat tych dokumentów Django - upewnij się, że wybrałeś dokumenty dla wersji Django, której używasz. Wydaje się, że wiele się zmieniło między wersjami w odniesieniu do plików statycznych.
Sam Starling
3
@Sam ma świetny punkt widzenia. Nie mogłem znaleźć plików statycznych na całe życie. następnie zmień zainstalowaną wersję django i voila. to było dosłownie wszystko, co musiałem zrobić, ponieważ najwyraźniej szukałem dokumentów dla złej wersji.
Josh Brown,
36

Mówiąc bardziej ogólnie, pytasz, jak udostępnić plik statyczny z Django. Jeśli korzystasz z Apache, powinieneś przeczytać http://docs.djangoproject.com/en/dev/howto/deployment/modpython/

Jeśli używasz serwera deweloperskiego (powiedzmy na swoim laptopie), przeczytaj http://docs.djangoproject.com/en/dev/howto/static-files/

Zwróć uwagę na duże, grube zastrzeżenie dotyczące serwera deweloperskiego Django:

  • Korzystanie z tego serwera jest nieefektywne i niebezpieczne.
  • Nie używaj tego w warunkach produkcyjnych.
  • Używaj tego tylko do programowania.
Peter Rowell
źródło
„Nie używaj tego w środowisku produkcyjnym”. Czy możesz to rozwinąć?
Chris,
@Chris: Masz rację, stwierdzenie było nieco niejednoznaczne. Miałem na myśli serwer deweloperski Django. Chociaż uruchamiałem go kilka razy w naszej witrynie produkcyjnej, tylko przez krótki czas podczas debugowania poważnych problemów.
Peter Rowell
Dzięki za wyjaśnienie, patrzyłem na moje wdrożenia django działające na Apache i zastanawiałem się, co zrobiłem źle. :)
Chris
1
Miły. Podoba mi się, że 3 elementy mówią to samo na różne sposoby. Dzięki za ostrzeżenie.
KobeJohn,
13
Absolutnie uwielbiam ludzi, którzy przychodzą 4,5 roku po opublikowaniu odpowiedzi i głosują na nią w dół. Zastanawiam się, czy w ogóle wiedzieli, czym był Django w 11/08 ... prawdopodobnie nie. To nie punkty rep że dostać się do mnie, to jest wyświetlany połączenie ignorancji i arogancji z odrobiną bycia waaay późno do partii. Zastanawiam się, jak oceniliby moje posty na comp.lang.c w, powiedzmy, 1987? Lepiej nie pytać.
Peter Rowell
13

Przez jakiś czas powodowało to również problemy (404 nie znaleziono błędów). Brakującym fragmentem dla mnie była edycja STATICFILES_DIRSkrotki w settings.py, aby uzyskać to:

STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    os.path.join(os.path.dirname(__file__),'media').replace('\\','/'),
)

Następnie zebrałem moje pliki CSS w folderze o nazwie „media”, który znajdował się na najwyższym poziomie mojego projektu django.

Również miałem:

MEDIA_ROOT = ''
MEDIA_URL = ''
STATIC_ROOT = ''
STATIC_URL = '/media/'

(upewnij się, że masz prowadzenie / powyżej wSTATIC_URL )

Oczywiście, jak wspomniano powyżej, musisz mieć poprawnie dołączony plik CSS z plików html. Miałem:

<link href="{{ STATIC_URL }}css/ea_base.css" rel="stylesheet" type="text/css" media="screen" />
jacanterbury
źródło
Wreszcie jasne, proste i eleganckie rozwiązanie. Działa dobrze z django 1.5.
pbarill
# Zawsze używaj ukośników, nawet w systemie Windows. .replace('\\','/')jest niepotrzebne.
mak
12

Jakie ustawienia muszę zrobić, aby Django zobaczyło plik css?

Żaden.

Upewnij się, że szablon zawiera plik CSS (tak jak robi to standardowy HTML) i umieść plik CSS na serwerze multimediów.

Dla wyjaśnienia: w przypadku Django jest wysoce zalecane, abyś udostępniał wszystkie swoje media (wszystko, co nie jest dynamicznym html) z innej instancji serwera. Sposób implementacji zależy wyłącznie od Ciebie, ale większość ludzi tworzy subdomenę.

Oli
źródło
2
Cześć, Oli. Wiem, że ten post ma prawie 3 lata, ale czy nadal jest to najlepszy sposób na połączenie css z szablonami django? Wygląda na to, że najłatwiej byłoby po prostu połączyć css z adresem URL abs, takim jak static.example.com i po prostu przechowywać wszystkie pliki statyczne pod tym adresem URL.
cp3
0

Cóż, najłatwiejszym sposobem użycia css z django jest dodanie go do szablonów jako plików statycznych.

Ale to trochę jak Ajax, nie znalazłem nic, co mówi, jak to włączyć w standardowy sposób.

Istnieje moduł kompresora css dla django, jeśli chcesz zoptymalizować jego rozmiar.

Roch
źródło