2012-04-15 23 views
12

Nie mogę załadować statycznych plików z moich szablonów. Śledziłem oficjalną dokumentację, ale muszę czegoś przegapić.Django nie udostępnia plików statycznych, otrzymując błędy 404

Moje układ katalogów (wygenerowane przez Django, większość plików pominięta):

myproject 
    myproject 
    settings.py 
    urls.py 
    static 
    css 
     bootstrap.css 
     main.css 
    templates 
    base.html 
    myapp1 
    myapp2 
    ... 
    manage.py 

My settings.py:

STATIC_URL = 'static/' 

ja przedstawieniu moich stylów jak tak (z moich szablonów):

{% load staticfiles %} 
<link rel="stylesheet" href="{% static "css/bootstrap.css" %}" type="text/css"> 
<link rel="stylesheet" href="{% static "css/style.css" %}" type="text/css"> 

Która daje to po wyrenderowaniu (w HTML):

<link rel="stylesheet" href="static/css/bootstrap.css" type="text/css"> 
<link rel="stylesheet" href="static/css/style.css" type="text/css"> 

Jednak te linki w rzeczywistości nigdzie nie prowadzą (gdy je odwiedzam, dostaję błąd 404 od Django). Czuję, że mogę to naprawić, dodając coś w urls.py, ale myślałem, że Django zrobił to automatycznie, kiedy uruchamiasz serwer? czego mi brakuje?

+2

Spróbuj: 'python manage.py findstatic --verbosity 2 css/styles.css', aby zobaczyć, gdzie Django szuka plików statycznych. – deed02392

Odpowiedz

22

Czy zdefiniowałeś swój katalog plików statycznych w settings.py?

Zgaduję, że masz zainstalowane 'django.contrib.staticfiles', w swoich zainstalowanych aplikacjach.

Jeśli nie zdefiniowano pliki statyczne dir, można by zrobić coś takiego:

import os.path 

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) 

STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, 'static'), 
) 
+0

Yup Mam załadowane 'django.contrib.staticfiles' i mam' STATIC_URL = '/ static /' 'w moim pliku ustawień. – n0pe

+0

Czy wypełniłeś STATICFILES_DIRS absolutną ścieżką do folderu statycznego? Tak jak wyżej wspomniana odpowiedź. – shadrx

+0

Nie! Dodałem absolutną ścieżkę systemu operacyjnego do mojego katalogu statycznego i zadziałało. Wielkie dzięki. – n0pe

1

Myślałem, że Django zrobił to automatycznie po uruchomieniu serwera?

Dlaczego tak uważasz? Jeśli śledziłeś oficjalną dokumentację, nie znajdziesz tego. Przeczytaj, co musisz zrobić, aby móc je obsłużyć w fazie rozwoju here.

Jest inny problem. Twój numer STATIC_URL jest relatywnym łączem, więc dodaje je do istniejącego adresu URL strony. Więc jeśli jesteś na stronie /foo, 'static/css/style.css' ocenia się na /foo/static/css/style.css'.

Upewnij się, że zaczyna się od / - tj. /static/ - lub jest pełnym adresem URL, tj. http://myserver.com/static/.

+0

Używam tego lokalnie, więc spróbowałem 'localhost/static /', 'localhost: 8000/static' oraz'/static/'all z tym samym wynikiem. Kiedy używałem metody 'localhost', po prostu otrzymałem stronę" about: blank "z Chrome. Kiedy użyłem '/ static /', dostałem kolejne 404. – n0pe

+0

W odpowiedzi na podany link, używam metody 'runserver', a moje pliki są na STATIC_URL, co (według dokumentów) oznacza, że ​​powinno to być automatyczne . Próbowałem także importować moduł sugerowany przez link i nadal nic. – n0pe

1

Sprawdź, czy STATICFILES_FINDERS jest zdefiniowana na settings.py

https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#std:setting-STATICFILES_FINDERS

Wartość domyślna z STATICFILES_FINDERS jest wystarczająco dobre, ale masz 2 opcje:

  • trzeba mieć plik statyczny wewnątrz aplikacji i posiadające tę aplikację w swoim INSTALLED_APPS

  • czy trzeba zdefiniować STATICFILES_DIRS ze swojej ścieżki do plików statycznych, jeśli oczekiwać zachowanie jest jednym z django.contrib.staticfiles.finders.FileSystemFinder

3

jest to roztwór roboczy dla statycznego/media/dostępu szablonu w Django dla Windows,

settings.py

import os.path 

STATIC_ROOT = '' 

STATIC_URL = '/static/' 

STATICFILES_DIRS = (
    os.path.join('static'), 
) 
0

Napotkałem ten problem. I rozwiązać problem poprzez zmianę href tak:

<html> 
<link rel="stylesheet" href="{{STATIC_URL}}css/bootstrap.css" type="text/css"> 
<link rel="stylesheet" href="{{STATIC_URL}}css/style.css" type="text/css"> 
</html> 
3

Mój problem został rozwiązany przez dodanie "STATICFILES_DIRS" w pliku settings.py

STATIC_URL = '/static/' 
STATICFILES_DIRS = (os.path.join('static'),) 
-3

Moje rozwiązanie było DEBUG = True w ustawieniach.

Powiązane problemy