Django Admin CSS manquant
J'ai joué avec la nouvelle commande collectstatic
et l'ai fait fonctionner pour mes pages normales. C'est-à-dire que je suis capable de charger mon css à cet emplacement http://localhost:8000/static/css/main.css
. Cependant, le css pour mon administrateur django ne semble pas apparaître.
Lorsque je navigue vers l'emplacement CSS admin à http://localhost:8000/static/admin/css/base.css
, je reçois une page 404 introuvable avec l'erreur suivante: /home/nai/GitProjects/cats/django-trunk/django/contrib/admin/media/css/base.css" does not exist
. En regardant dans django-trunk, Je n'ai jamais eu le dossier /home/nai/GitProjects/cats/django-trunk/django/contrib/admin/media/
pour commencer.
C'est bizarre?
En tout cas, dans mon dossier statique, il y a un dossier admin avec les dossiers CSS, img et js qui ont été créés lorsque j'ai couru collectstatic et l'url de la base.css semble pointer vers cet emplacement.
Cela se passe sur mon serveur de développement django. Voici quelques extraits pour aider à la chasse aux bogues:
Url
33 # In order for Dev Server to serve media files for the frontend site.
34 urlpatterns += staticfiles_urlpatterns()
35
36 try:
37 if settings.DEBUG: # defined in manage.py when the first arg is "runserver"
38 urlpatterns += patterns('',
39 (r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT}),
40 (r'^media-admin/(?P<path>.*)$', 'django.views.static.serve',{'document_root': os.path.join(settings.MEDIA_ROOT, '..', settings.ADMIN_MEDIA_PREFIX)}),
41 )
42 except NameError:
43 pass
Je pense que cela pourrait être quelque chose à voir avec la ligne 40 dans mon fichier URL, mais changer media-admin en static / admin n'a pas aider.
Les Paramètres
58 ADMIN_MEDIA_PREFIX = '/static/admin'
69 STATIC_ROOT = os.path.join(os.path.abspath(os.path.join(PROJECT_ROOT, '..', MEDIA_DIR, 'static')), '')
70
71 # URL prefix for static files.
72 # Example: "http://media.lawrence.com/static/"
73 STATIC_URL = '/static/'
74
75 # Additional locations of static files. Global files are stored in here
76 STATICFILES_DIRS = (
77 os.path.join(os.path.abspath(os.path.join(PROJECT_ROOT, '..', 'proj_public', 'static', 'proj')), ''),
78 )
79
7 réponses
Django vous recommande de déployer des fichiers statiques avec un serveur web autre que wsgi.
- dans settings.py , Ensemble:
STATIC_ROOT = 'static'
Exécutez
python manage.py collectstatic
, qui copiera les fichiers statiques/path/to/project/static/
-
Configurez votre serveur de fichiers statique. Si vous utilisez Nginx, vous pouvez ajouter cette configuration:
location /static/ { alias /path/to/project/static/; expires modified +1w; }
Recharger votre serveur web
Vous devriez maintenant avoir accès aux fichiers statiques.
Dans Django 1.4 ADMIN_MEDIA_PREFIX
est obsolète. Voici les étapes que j'ai suivies pour rattraper ces changements quelque peu récents de Django:
Dans
settings.py
, ajoutezdjango.contrib.staticfiles
pourINSTALLED_APPS
Dans
settings.py
defineSTATIC_URL
- le staticfiles application ne fonctionnera pas sans elle. Lors de l'utilisation derunserver
, ils seront gérés comme par magie, mais lorsque vous déployez, il doit s'agir d'un emplacement où ces ressources peuvent être récupérées par un navigateur.
Je pense que c'est tout ce qu'il y avait à faire.
J'utilise Django 1.4.3
Ce qui n'a pas fonctionné pour moi: Peu importe combien J'ai édité ADMIN_MEDIA_PREFIX dans settings.py Je n'ai remarqué aucun changement dans le HTML généré pour les pages D'administration de Django. Il dit toujours / media / admin / base.css quand je vois la source.
Ce qui a fonctionné pour moi.
Copié le dossier' admin ' à partir de /django/contrib/admin/static/
et collé dans le dossier 'media' de mes projets
Maintenant, cela fonctionne très bien.
Vous avez besoin d'une barre oblique finale dans votre paramètre ADMIN_MEDIA_PREFIX
.
Changer pour:
ADMIN_MEDIA_PREFIX = '/static/admin/'
J'utilise chef pour construire automatiquement mon serveur django sur un serveur AWS Ubuntu. Ce post a aidé, mais ce que j'ai fini par faire était d'ajouter le répertoire aux pages statiques d'admin de paquet dans un local_setings.py: https://github.com/jaycrossler/geoq-chef-repo/blob/master/cookbooks/geoq/templates/default/local_settings.py.erb#L16
(added to local_settings.py or to settings.py):
STATICFILES_DIRS = ('<%= node['geoq']['virtualenv']['location'] %>/local/lib/python2.7/site-packages/django/contrib/admin/static/',)
Cela a donné lieu à local_settings.py ayant:
STATICFILES_DIRS = ('/var/lib/geoq/local/lib/python2.7/site-packages/django/contrib/admin/static/',)
Notez que si vous avez déjà d'autres éléments dans votre STATICFILES_DIRS, vous voudrez peut-être ajouter à la liste, plutôt que de l'écraser.
Cela semble stupide, mais j'ai eu ce problème exact et la solution était de définir DEBUG=False
à DEBUG=True
sur mon environnement de développement local. Lorsque debug est défini sur False, il pense que c'est dans un environnement de production qui repose sur un endroit pour placer des fichiers statiques, tels que /var/www/html/static
, alors que le debug défini sur True utilise simplement le répertoire local.
Dans settings.py Ne pas utiliser tuple pour le
STATICFILES_DIRS =( OS.chemin.join(BASE_DIR, 'statique'), )
Vous devriez utiliser list, comme ceci
STATICFILES_DIRS =[ OS.chemin.join(BASE_DIR, 'statique'), ]