web-dev-qa-db-fra.com

pourquoi mon site d'administration Django n'a pas le style css 

je crée un site d'administration Django avec Version de développement Django

mais il n'a pas de style css:

alt text

que puis-je faire .

merci

61
zjm1126

Django ne sert pas de fichiers statiques par lui-même. Vous devez lui dire où sont les fichiers.

Le ADMIN_MEDIA_PREFIX dans le fichier settings.py pointera Django au bon endroit.

Puisque vous utilisez la version de développement, vous souhaiterez que le document spécifique à dev pour les fichiers statiques explique comment . Le lien d'Adam vous mènera à la version 1.2.

14
Evan Porter

Après avoir configuré vos STATIC_ROOT et STATIC_URL, vous devrez peut-être exécuter 

python manage.py collectstatic
50
David Mann

ADMIN_MEDIA_PREFIX est obsolète maintenant, utilisez STATIC_URL à la place. Définir STATIC_URL = '/static/' dans settings.py devrait faire l'affaire. Essayer:

import os.path  import sys

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

et alors: 

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

Fonctionne sur Django 1.4 pré-alpha SVN-16920.

16
Shamar

J'ai également rencontré ce problème à la suite du didacticiel de livre Django. Au chapitre 5 | Installation du modèle, le livre indique en faisant référence à la valeur par défaut INSTALLED_APPS- "Mettez temporairement en commentaire les six chaînes en mettant un caractère de hachage (#) devant elles." http://www.djangobook.com/fr/2.0/chapter05.html

Ensuite, au chapitre 6, le livre dit au lecteur de supprimer le commentaire 4 de ces 6 lignes -- "Notez que nous avons commenté ces quatre entrées INSTALLED_APPS au chapitre 5. Décommentez-les maintenant." 

Mais la ligne statcifiles est ce qui est nécessaire pour restaurer CSS sur la page d’administration, alors ne commentez pas ce commentaire 'Django.contrib.staticfiles',

9
Chris SH

J'ai lu plusieurs autres threads essayant de résoudre ce problème ... utilisé un alias comme dans d'autres threads . Cela suppose que votre propre application personnalisée sert correctement les fichiers statiques, ce qui indiquerait que vos paramètres STATIC_ROOT et STATIC_URL sont corrects. 

STATIC_ROOT = ''
STATIC_URL = '/static/'

Puis (à partir de votre répertoire statique):

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

J'espère que cela aide quelqu'un ... il y a beaucoup de discussions sur ce sujet . :(

6
Taylor

Dans /project_name/project_name/settings.py, vous devez définir STATIC_URL pour indiquer à votre site quelle URL utiliser pour les fichiers statiques. 

Ensuite, définissez STATIC_ROOT pour être un dossier sur votre système de fichiers qui ne correspond à aucun de vos répertoires listés dans la liste STATICFILES_DIRS.

Une fois que STATICFILES_ROOT est défini, vous devez exécuter python manage.py collectstatic à partir du répertoire du projet.

Cela copiera tous les fichiers statiques admin et tous les fichiers des autres dossiers répertoriés dans la liste STATICFILES_DIRS. En gros, tous vos fichiers statiques sont regroupés au même endroit, ce qui vous permet de les déplacer sur votre CDN lors du déploiement de votre site. Si vous êtes comme moi et que vous n'avez pas de CDN, vous avez alors deux options:

  1. Ajoutez le dossier que vous avez défini en tant que STATIC_ROOT à la liste STATICFILES_DIRS. Cela permettra aux chercheurs de staticfiles dans Django de localiser tous les fichiers statiques.
  2. Déplacez le dossier entier des fichiers statiques ailleurs sur votre système de fichiers et dirigez STATICFILES_DIRS pour inclure ce nouvel emplacement.

Je ne fais aucun commentaire sur la sécurité avec cette réponse, c'est simplement la façon dont j'ai pu développer avec mon serveur Web pour de petits projets. Je pense que vous voudrez un CDN, comme le suggère Django, si vous faites quelque chose de plus grand.

UPDATE: Je viens de rencontrer ce problème et cette méthode ne fait pas tout à fait ce que je pense que vous voulez. Ce qui a fini par fonctionner pour moi, c’est après avoir lancé collectstatic que je viens de copier les fichiers statiques admin qu’il a placés dans STATICFILES_ROOT dans le répertoire que j’avais utilisé pour mes propres fichiers statiques. Cela a résolu le problème pour moi.

3
Brad P.

Si vous utilisez un serveur Apache pour héberger votre site Django, vous devez vous assurer que l'alias statique pointe vers votre répertoire/sur le site/site_media/static /. Si vos fichiers statiques sont dans le répertoire/du site/site/site_media/static /, la configuration d'alias Apache précédente ne fonctionnera pas.

2
Yulun

En plus de nombreuses autres réponses utiles, j'ai eu un problème qui n'a pas encore été noté. Après la mise à niveau de Django 1.3 à 1.6, mon répertoire de fichiers statiques présentait un lien symbolique rompu avec les fichiers statiques de l'administrateur Django.

Mon fichier settings.py a été configuré avec:

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

Selon cette réponse

Django s'attend maintenant à trouver les fichiers statiques admin sous l'URL /admin /.

J'ai eu un lien symbolique /var/www/static/my-dev/admin qui a été mis à:

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

Cet emplacement n'existe plus dans Django 1.6, j'ai donc mis à jour le lien vers:

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

Et maintenant, mon site d’administration fonctionne correctement.

2
cod3monk3y

Tout en suivant le didacticiel Django, j'ai eu un problème similaire et dans mon cas, le problème était le type MIME utilisé par le serveur de développement lors du traitement de fichiers CSS.

Le type MIME servi était "application/x-css", ce qui a conduit au message d'avertissement suivant dans Chrome (dans l'onglet "Réseau" des outils de développement):

Ressource interprétée comme une feuille de style mais transférée avec le type MIME application/x-css: " http://127.0.0.1:8000/static/admin/css/base.css "

La solution de contournement que j'ai trouvée: changer le type de mime à servir en ajoutant les lignes suivantes au fichier manage.py de la webapp Django:

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

Note: a travaillé pour moi avec Django 1.7.4 sur Python 2.7 et Chrome 40.0

1
Gio

Assurez-vous que 'Django.contrib.staticfiles' est dans votre INSTALLED_APPS dans votre settings.py

1
RedRory

Si vous définissez une valeur dans settings.py pour STATICFILES_DIRS et que le dossier déclaré n'existe pas ou se trouve à un emplacement incorrect, l'administrateur n'aura aucun styleeg .__ en définissant STATICFILES_DIRS = (os. path.join (BASE_DIR, "static")) et le dossier static n'existe pas 

0
cormacio100

Si le problème concerne un serveur dev/test/prod et que vous utilisez Nginx, suivez les étapes ci-dessous.

  • définir les configurations dans settings.py comme quelque chose en dessous

    STATIC_URL = '/static/'
    
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    
  • Exécutez la commande ci-dessous pour créer des fichiers css et js dans un dossier statique.

    $ python manage.py collectstatic
    
  • config dans/etc/nginx/sites-enabled/exemple (Nginx) pour servir des fichiers statiques

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

Faute d'essayer des milliers de suggestions, j'ai finalement trouvé une solution qui m'a aidé. Voici ce que j’ai essayé et ce que j’utilisais .J’utilise Django-1.11 et le serveur Web nginx . Tout d’abord, j’ai veillé à ce que mes fichiers CSS/js n’obtiennent pas la valeur 404 dans la console du navigateur. Après cela, je pouvais voir un avertissement 

Ressource interprétée comme une feuille de style mais transférée avec le type mime text/plain

J'ai trouvé le fichier base.html dans les modèles d'administrateur et supprimé 

type="text/css"

et maintenant les lignes ressemblent à ceci:

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

Cela a résolu le problème pour moi.

0
Rahul Singal

Mon problème a été résolu en créant un nouvel environnement virtuel pour le projet, avant que j'utilisais un interpréteur python de niveau système général.

$ mkvirtualenv myproject

Référence: https://docs.djangoproject.com/fr/2.1/howto/windows/

0
Khateeb321

lancer: python manage.py collectstatic

Ajoutez cette ligne à Vhost qui se trouve à: /etc/Apache2/sites-available/000-default.conf

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

Voici le paramétrage complet de Vhost pour Django setup

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

Cela fonctionnera à coup sûr!

0
Kundan roy

Même problème que j'ai rencontré lors du développement d'un site dans Django-1.10.5 et python-2.7.13. Mais dans mon firefox-51 et chrome, la page de connexion a pu obtenir le css mais il n'y avait toujours pas de style. Mais bizarrement, cela fonctionnait sur IE-8 ..

J'ai essayé de faire tout ce qui est mentionné ici et qui convient à mon ensemble de versions sw. Aucun n'a travaillé.

Mais quand j'ai essayé le même site sur un autre système qui avait le python-2.7.8, cela a fonctionné.

Juste posté si cela peut aider quelqu'un ... 

édité: plus tard, j'ai trouvé que dans python-2.7.13, écrire les deux lignes suivantes dans settings.py (plus vider le cache du navigateur) avait fait l'affaire

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