perché il mio sito di amministrazione di django non ha lo stile css


87

Realizzo un sito di amministrazione Django utilizzando la versione di sviluppo di Django

Ma non ha uno stile CSS:

testo alternativo

cosa posso fare?

Grazie


2
C'è uno stile a cui si fa riferimento che non viene caricato?
Pekka

1
È necessario configurare il server di sviluppo per servire file statici: docs.djangoproject.com/en/1.2/howto/static-files
Adam Vandenberg

1
@Pekka, sì, è lo stile predefinito di django, è in D: \ Python25 \ Lib \ site-packages \ django \ contrib \ admin \ media
zjm1126

1
Ho avuto lo stesso problema di contenuto statico di amministrazione non visualizzabile, ma con nginx (invece dell'ambiente di sviluppo). Fondamentalmente, controlla il tuo file di configurazione nginx e assicurati che sia la posizione del tuo "collectstatic". Dettagli qui: serverfault.com/questions/403264/…
Il

Risposte:


14

Django non serve file statici da solo. Devi dirgli dove sono i file.

L'ADMIN_MEDIA_PREFIX nel settings.py punterà Django nella giusta posizione.

Dato che stai utilizzando la versione di sviluppo, ti consigliamo il documento specifico per dev per i file statici . Il collegamento di Adam ti porterà alla versione 1.2.


11
Buona risposta ma ora deprecata e assente da settings.py. Leggi di seguito per soluzioni più aggiornate.
Russell

Ho lo stesso errore ma in Flask metto il mio css nella cartella statica. E usa jinj2 2 suntax ie {{url_for ('static', filename = 'css / style.css')}}, ma ancora sul mio laptop ho questo errore. Ho forzato l'aggiornamento della pagina ma il problema persiste. Per favore aiuto
Salman Mushtaq

67

Dopo aver impostato il tuo STATIC_ROOTe STATIC_URL, potresti dover eseguire

python manage.py collectstatic

1
Funziona anche su 1.5.2. Non ho dovuto modificare o aggiungere alcun file o codice
lukik

1
Forse utile per qualcuno: dovresti usare lo stesso nome per STATIC_ROOTe STATIC_URL, esempio: ho combinato "staticfiles" e "static" , usato STATIC_ROOT=os.path.join(BASE_DIR, "staticfiles")"e STATIC_URL="/static/". La mia app ha funzionato bene, ma non è stato possibile trovare i file admin. quindi cambialo sia in "staticfiles" o in "static"
elano7

17

ADMIN_MEDIA_PREFIXè deprecato ora, usa STATIC_URLinvece. L'impostazione STATIC_URL = '/static/'in settings.py dovrebbe fare il lavoro. Provare:

import os.path  import sys

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

e poi:

STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
STATIC_URL = '/static/'

Funziona su Django 1.4 pre-alpha SVN-16920.


1
Anche questo non funziona per me. Noto che se sposto (manualmente) la cartella static/adminall'interno static/css/allora posso accedere ai file css. Quindi sembra che posso accedere ai file css solo se sono all'interno di static/filesma il collectstatic non li mette lì. Ovviamente, spostare manualmente la cartella non funziona perché i modelli continuano a puntare static/admin.
toto_tico

Ha funzionato per me durante il tentativo di eseguire l'interfaccia di amministrazione creata con Django v1.2, testata su 1.3 e quindi ridistribuita su v1.4. Esecuzione di Ubuntu 12.04 LTE
Adam Lewis

9

Mi sono imbattuto in questo problema anche seguendo il tutorial di Django Book. Nel Capitolo 5 | Installazione del modello, il libro afferma quando si fa riferimento all'impostazione predefinita INSTALLED_APPS- "Commenta temporaneamente tutte e sei le stringhe inserendo un carattere cancelletto (#) davanti ad esse." http://www.djangobook.com/en/2.0/chapter05.html

Quindi, nel Capitolo 6, il Libro dice al lettore di decommentare 4 di quelle 6 righe - "nota che abbiamo commentato queste quattro voci INSTALLED_APPS nel Capitolo 5. Togli il commento ora."

Ma la riga statcifiles è ciò che è necessario per ripristinare CSS nella pagina di amministrazione, quindi rimuovere il commento da 'django.contrib.staticfiles',


Rimuovere il commento da "django.contrib.staticfiles" nel file settings.py come suggerito sopra ha funzionato anche per me. "django.contrib.staticfiles" dovrebbe essere presente per impostazione predefinita nel file settings.py in INSTALLED_APPS. Grazie Chris per il tuo suggerimento.
user2471242

Sono arrivato anche dal Django Book. Quella rimozione di un carattere lo fa.
pbarill

8

Ho letto molti altri thread cercando di risolvere questo problema ... ho fatto ricorso a un alias come in altri thread. Ciò presuppone che la tua app personalizzata stia servendo correttamente i file statici, il che indicherebbe che STATIC_ROOT e STATIC_URL hanno impostazioni corrette.

STATIC_ROOT = ''
STATIC_URL = '/static/'

Quindi (dalla tua directory statica):

ubuntu@ip-1-2-3-4:/srv/www/mysite.com/app_folder/static$ sudo ln -s /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin/ admin

Spero che questo aiuti qualcuno ... ci sono molte discussioni su questo argomento. :(


questa è la risposta funziona come incantesimi grazie taylor.well done
Spikie

3

In /project_name/project_name/settings.pyè necessario impostare STATIC_URLper dire al tuo sito quale URL utilizzare per i file statici.

Quindi imposta STATIC_ROOTuna cartella sul tuo filesystem che non è la stessa di nessuna delle tue directory elencate STATICFILES_DIRSnell'elenco.

Una volta STATICFILES_ROOTimpostato, verrai eseguito python manage.py collectstaticdalla directory del progetto.

Ciò copierà tutti i file statici dell'amministratore e tutti i file in qualsiasi altra cartella elencata STATICFILES_DIRSnell'elenco. Fondamentalmente questo mette tutti i tuoi file statici in un unico posto in modo da poterli spostare sul tuo CDN durante la distribuzione del tuo sito. Se sei come me e non hai un CDN, hai due opzioni:

  1. Aggiungere la cartella impostata come STATIC_ROOTalla STATICFILES_DIRSlista. Ciò consentirà ai cercatori di file statici in django di individuare tutti i file statici.
  2. Sposta l'intera cartella dei file statici da qualche altra parte nel tuo file system e dirigiti STATICFILES_DIRSper includere quella nuova posizione.

Non faccio commenti sulla sicurezza con questa risposta, è solo il modo in cui sono stato in grado di sviluppare con il mio server web per piccoli progetti. Mi aspetto che vorrai un CDN come suggerisce django se stai facendo qualcosa su scala più grande.

AGGIORNAMENTO: mi sono imbattuto in questo problema e questo metodo non ha fatto quello che penso tu voglia. Quello che ha finito per funzionare per me è stato che dopo aver eseguito collectstaticho appena copiato i file statici dell'amministratore che ha inserito nella STATICFILES_ROOTdirectory che avevo usato per i miei file statici. Questo ha risolto il problema per me.


3

Oltre a molte altre risposte utili, ho riscontrato un problema che non è stato ancora notato. Dopo l'aggiornamento da Django 1.3 a 1.6, la mia directory dei file statici aveva un collegamento simbolico interrotto ai file statici dell'amministratore di django.

My settings.py è stato configurato con:

STATICFILES_DIRS = (
    '/var/www/static/my-dev',
)

Secondo questa risposta ,

Django ora si aspetterà di trovare i file statici dell'amministratore sotto l'URL / admin /.

Avevo un collegamento simbolico /var/www/static/my-dev/adminche era impostato su:

admin -> /usr/local/lib/python2.7/dist-packages/django/contrib/admin/media/

Quella posizione non esiste più in django 1.6, quindi ho aggiornato il collegamento a:

admin -> /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin/

E ora il mio sito di amministrazione funziona correttamente.


2

Se stai usando il server Apache per ospitare il tuo sito django, devi assicurarti che l'alias statico punti alla tua directory / a site / site_media / static /. Se i tuoi file statici sono in / directory to site / site / site_media / static /, la precedente configurazione dell'alias di Apache non funzionerà.


2

Mentre seguivo il tutorial di Django, ho avuto un problema simile e nel mio caso il problema era il tipo MIME utilizzato dal server di sviluppo quando serviva i file css.

Il tipo MIME fornito era "application / x-css" che ha portato al seguente messaggio di avviso in Chrome (nella scheda "Rete" degli strumenti per sviluppatori):

Risorsa interpretata come foglio di stile ma trasferita con application / x-css di tipo MIME: " http://127.0.0.1:8000/static/admin/css/base.css "

La soluzione alternativa che ho trovato: cambiare il tipo MIME da servire aggiungendo le seguenti righe al file manage.py della webapp django:

import mimetypes
mimetypes.init()
mimetypes.types_map['.css'] = 'text/css'

Nota: ha funzionato per me con Django 1.7.4 su Python 2.7 e Chrome 40.0


provato con Django 2.2.1 e non funziona. I file .css statici del mio pannello di amministrazione vengono serviti da nginx con codice HTTP 200, ma Chrome afferma che stanno arrivando come Content-Type: text/plaine non vengono visualizzati nella pagina.
user5359531

2

Lo stesso tipo di problema che ho riscontrato durante lo sviluppo di un sito in django-1.10.5 e python-2.7.13. Ma nel mio firefox-51 e chrome, la pagina di accesso è stata in grado di ottenere il css ma non c'era ancora lo stile. Ma stranamente funzionava su IE-8 ..

Ho provato a fare ogni cosa possibile menzionata qui e adatta al mio set di versioni sw. Nessuno ha funzionato.

Ma quando ho provato lo stesso sito su un altro sistema che aveva il python-2.7.8, ha funzionato ..

Appena pubblicato se può aiutare qualcuno ...

modificato: in seguito ho scoperto che in python-2.7.13, scrivere le seguenti due righe in settings.py (oltre a svuotare la cache del browser) aveva fatto il trucco

import mimetypes
mimetypes.add_type("text/css", ".css", True)


1

Assicurati che 'django.contrib.staticfiles'sia nel tuo INSTALLED_APPSnel tuo settings.py


1

correre: python manage.py collectstatic

Aggiungi questa riga a Vhost che si trova in: /etc/apache2/sites-available/000-default.conf

Alias ​​/ static / admin / /var/www/html/example.com/static/admin

Ecco l'intera impostazione di Vhost per l'installazione di django

<VirtualHost *:80>
        ServerName gautam.tech
        ServerAlias www.gautam.tech

        WSGIDaemonProcess gautam.tech python-path=/var/www/html/gautam.tech python-home=/var/www/html/gautam.tech/venv
        WSGIProcessGroup gautam.tech
        #Your static files location
        Alias /static /var/www/html/gautam.tech/static
        Alias /media/ /var/www/html/gautam.tech/media
        Alias /static/admin/ /var/www/html/gautam.tech/static/admin

        <Directory /var/www/html/gautam.tech/static>
                Require all granted
        </Directory>

        <Directory /var/www/html/gautam.tech/media>
                       Require all granted
        </Directory>

        WSGIScriptAlias / /var/www/html/gautam.tech/myproject/wsgi.py

        DocumentRoot /var/www/html/gautam.tech
        <Directory /var/www/html/gautam.tech>
                <Files wsgi.py>
                        Require all granted
                </Files>
        </Directory>

        CustomLog /var/www/html/gautam.tech/access.log combined
        ErrorLog /var/www/html/gautam.tech/error.log
</VirtualHost>

Funzionerà di sicuro!


Risposta molto buona. Dovevo solo eseguire il comando collectstatic.
PowerAktar

1

Nel problema si trova in un server dev / test / prod e si utilizza Nginx, seguire i passaggi seguenti.

  • imposta le configurazioni in settings.py come qualcosa di seguito

    STATIC_URL = '/static/'
    
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    
  • Esegui il comando seguente per creare file css e js nella cartella statica

    $ python manage.py collectstatic
    
  • config in / etc / nginx / sites-enabled / example (Nginx) per servire file statici

    location /static/ {
            alias /project/root/folder/static/;
    }
    

1

questo funziona bene e facilmente. Ho spostato (manualmente) la cartella. devi solo copiare il tuo static/admindalla directory del progetto principale e incollarlo in public_html static/ se non c'è una cartella statica devi eseguire il seguente comando nel terminale

python manage.py collectstatic

ecco qua con il css funzionante dell'amministratore Django


0

Se hai un valore impostato in settings.py per STATICFILES_DIRS e la cartella dichiarata non esiste o si trova in una posizione sbagliata, l'amministratore non avrà uno stile, ad esempio definendo STATICFILES_DIRS = (os.path.join (BASE_DIR, "static" )) e la cartella statica non esiste


0

Non riuscendo dopo aver provato migliaia di suggerimenti, ho finalmente trovato una soluzione che ha aiutato. Ecco cosa ho provato e cosa stavo usando. Sto usando django-1.11 e il server web nginx. In primo luogo, mi sono assicurato che i miei file CSS / js non ricevessero 404 nella console del browser. Dopo di che, ho potuto vedere un avvertimento

Risorsa interpretata come foglio di stile ma trasferita con testo di tipo MIME / normale

Ho trovato base.html nei modelli di amministrazione e l'ho rimosso

type="text/css"

e ora le linee hanno questo aspetto:

<link rel="stylesheet"  href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}" /> 

Questo ha risolto il problema per me.


0

Configurazione dei file statici Assicurati che django.contrib.staticfilessia incluso in INSTALLED_APPS .

Nel tuo file settings.py, definisci STATIC_URL, ad esempio:

STATIC_URL = '/static/'

per maggiori dettagli file statici


0

Il pannello di amministrazione funzionava bene, tranne per il fatto che css non veniva caricato. Questo ha funzionato per Lightsail Django con Apache

1.Definisci STATIC_ROOT e STATIC_URL in settings.py

STATIC_ROOT = '/opt/bitnami/projects/decisions/decision/'
STATIC_URL = '/static/'

2. Espellere (copiare) i file delle risorse di amministrazione nel progetto

eseguire python manage.py collectstatic questo comando crea una /opt/bitnami/projects/decisions/decision/admincartella concss/ fonts/ img/ js/ sottocartelle

3. Rendi / URL statico accessibile da apache

Incolla questo frammento /opt/bitnami/apache2/conf/bitnami/bitnami.conf(se hai impostato ssl, il percorso del file sarà /opt/bitnami/apache2/conf/bitnami/bitnami-ssl.conf)

Alias /static/ "/opt/bitnami/projects/decisions/decision/"
<Directory "/opt/bitnami/projects/decisions/decision/">
    Order allow,deny
    Options Indexes
    Allow from all
    IndexOptions FancyIndexing
</Directory>

4. Non dimenticare di riavviare Apache

sudo /opt/bitnami/ctlscript.sh restart apache
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.