2015-02-10 34 views
6

Ciao a tutti Sto avendo difficoltà a risolvere questo problema: se mi rivolgo DEBUG su False, non posso correre runserver manage.py:Django non riesce a trovare staticfiles con Debug = False e allowed_hosts

CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False 

quindi, diciamo che aggiungo qualcosa da allowed_hosts:

ALLOWED_HOSTS = ['*'] 
or 
ALLOWED_HOSTS = ['localhost'] 
or 
ALLOWED_HOSTS = ['127.0.0.1', 'localhost'] 

Ora, posso fare runserver''manage.py ma i staticfiles non funzionano. Strano.

Se si attiva DEBUG su True, allora funziona con ALLOWED_HOSTS impostato su nothing, su localhost o su *. Quindi, immagino che il problema abbia a che fare con DEBUG. Non lo capisco

risposta

10

Nella modalità DEBUG, il server di sviluppo Django gestisce i file statici per voi. Tuttavia, questo non è il migliore per la produzione in quanto è molto più inefficiente di un vero server. Vedi here.

servizio dei file

In aggiunta a queste operazioni di configurazione, avrete anche bisogno di servire realmente i file statici.

Durante lo sviluppo, se si utilizza django.contrib.staticfiles, questo verrà eseguito automaticamente da runserver quando DEBUG è impostato su True (vedere django.contrib.staticfiles.views.serve()).

Questo metodo è grossolanamente inefficiente e probabilmente non sicuro, quindi non è adatto alla produzione.

Vedere Distribuzione di file statici per strategie appropriate per la pubblicazione di file statici negli ambienti di produzione.

Verificare here per informazioni su come servire file statici in produzione.

MODIFICA: aggiungere quanto segue per rispondere alla domanda @alejoss sulla visualizzazione delle pagine di errore con DEBUG = True.

ho aggiunto qualcosa come il seguente alla mia radice urls.py di file:

if settings.DEBUG: 
    urlpatterns += patterns(
     '', 
     url(r'^400/$', TemplateView.as_view(template_name='400.html')), 
     url(r'^403/$', TemplateView.as_view(template_name='403.html')), 
     url(r'^404/$', 'django.views.defaults.page_not_found'), 
     url(r'^500/$', 'django.views.defaults.server_error'), 
    ) 

potrebbe essere necessario modificare un po '(vale a dire, può avere bisogno di essere modificato le pagine 400 e 403 se i vostri nomi dei modelli sono diversi) . Fondamentalmente, questo ti permette di visitare http://localhost/400 per vedere la tua pagina di errore 400, http://localhost/403 per vedere la tua pagina di errore 403 e così via.

+0

Ok, appena eseguito attraverso lo stesso problema. Come dovrei testare il mio 404.html/500.html? Se il debug è falso, ottengo l'errore, se il debug è vero, allora non vedrò le mie pagine di errore. :( – alejoss

+1

Ehi @alejoss, ho modificato la mia risposta originale in modo da poterla vedere con la formattazione. Fammi sapere se hai qualche problema. – Alex

3

Se hai ancora bisogno di server statico a livello locale (ad esempio, per i test senza debug) è possibile eseguire devserver in modalità insicura:

manage.py runserver --insecure 
+0

La risposta originale: http://stackoverflow.com/questions/5836674/why- non-debug-falso-ambiente-make-my-django-statica-files-access-falliscono – haifzhan