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

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.


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.

„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" />

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ę.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.