2012-04-15 17 views
12

Non riesco a caricare i miei file statici dai miei modelli. Ho seguito la documentazione ufficiale ma mi manca qualcosa.Django non sta servendo file statici, ottenendo errori 404

mio layout directory (generato da Django, la maggior parte dei file omessi):

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

mio settings.py:

STATIC_URL = 'static/' 

sto riferimento i miei fogli di stile in questo modo (dai miei modelli):

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

Che restituisce questa volta (in HTML):

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

Eppure questi collegamenti in realtà non portano da nessuna parte (quando li visito ottengo 404 errori da Django). Sento che potrei risolvere questo problema aggiungendo qualcosa in urls.py, ma pensavo che Django l'avesse fatto automaticamente quando avvii il server? Cosa mi manca?

+2

Provare: 'python manage.py findstatic --verbosity 2 css/styles.css' per vedere dove Django sta cercando i file statici. – deed02392

risposta

22

Hai definito la directory dei file statici in settings.py?

Immagino che tu abbia 'django.contrib.staticfiles', nelle tue app installate.

Se non è stato definito il vostro file statici dir, si potrebbe facendo qualcosa di simile a questo:

import os.path 

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

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

Yup Ho caricato 'django.contrib.staticfiles' e ho' STATIC_URL = '/ static /' 'nel mio file delle impostazioni. – n0pe

+0

Hai compilato STATICFILES_DIRS con il percorso assoluto della tua cartella statica? Come la risposta di cui sopra ha detto di fare. – shadrx

+0

No! Ho aggiunto il percorso assoluto del sistema operativo alla mia directory statica e ha funzionato. Molte grazie. – n0pe

1

Ho pensato che Django l'ha fatto automaticamente quando si esegue il server?

Perché l'hai pensato? Se hai seguito la documentazione ufficiale, non l'avrai trovato. Leggi cosa devi fare per servirli nello sviluppo here.

C'è un altro problema. Il tuo STATIC_URL è un collegamento relativo, quindi i browser aggiungono all'URL della pagina esistente. Quindi, se ti trovi a pag. /foo, 'static/css/style.css' valuta /foo/static/css/style.css'.

Assicurarsi che inizi con / - ovvero /static/ - oppure è un URL completo, ovvero http://myserver.com/static/.

+0

L'ho eseguito localmente, quindi ho provato 'localhost/static /', 'localhost: 8000/static' e'/static/'tutti con lo stesso risultato. Quando ho usato il metodo 'localhost', ho ottenuto semplicemente una pagina' about: blank' da Chrome. Quando ho usato '/ static /', ho ottenuto un altro 404. – n0pe

+0

In risposta al link che hai dato, sto usando il metodo 'runserver' ei miei file sono in STATIC_URL, che (secondo i documenti) significa che dovrebbe essere automatico . Ho anche provato a importare il modulo suggerito dal link e ancora niente. – n0pe

1

Verificare se STATICFILES_FINDERS è definito nella vostra settings.py

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

Il valore di default di STATICFILES_FINDERS è abbastanza buono ma hai 2 scelte:

  • è necessario avere il file statico all'interno di un app e avere questa applicazione nel vostro INSTALLED_APPS

  • oppure è necessario definire STATICFILES_DIRS con il percorso dei file statici se aspettiamo che il comportamento che è quello di django.contrib.staticfiles.finders.FileSystemFinder

3

Questa è la soluzione di lavoro per statico/media/accesso modello in Django per le finestre,

settings.py

import os.path 

STATIC_ROOT = '' 

STATIC_URL = '/static/' 

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

Ho riscontrato anche questo problema. E ho risolto il problema rivedendo la href in questo modo:

<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

Il mio problema è stato risolto con l'aggiunta di "STATICFILES_DIRS" nel file settings.py

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

La mia soluzione era DEBUG = True nelle impostazioni.

Problemi correlati