Django admin pas de servir les fichiers statiques?
Django 1.6
Je vais avoir de la difficulté à servir mes fichiers statiques pour mon Django Admin.
urls.py:
urlpatterns = patterns('',
url(r'^$', 'collection.views.index', name='home'),
url(r'^collection/', include('collection.urls')),
url(r'^admin/', include(admin.site.urls)),
)
if settings.DEBUG:
urlpatterns += patterns('',
url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
'document_root': settings.MEDIA_ROOT,
}),
url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {
'document_root': settings.STATIC_ROOT,
}),
)
settings.py
...
MEDIA_ROOT = '/Users/me/projectdir/media/'
MEDIA_URL = 'media/'
STATIC_ROOT = '/Users/me/projectdir/static/'
STATIC_URL = 'static/'
...
modèle (base.html)
<!DOCTYPE html>
<html lang='en-us'>
<head>
<title>Mysite</title>
{% load static %}
{% block links %}
<link href="{% static 'css/bootswatch-simplex.css' %}" rel="stylesheet" type="text/css">
<link href="{% static 'css/custom.css' %}" rel="stylesheet" type="text/css">
<link rel="shortcut icon" href="{% static "favicon.ico" %}">
{% endblock %}
<script src="{% static "lib/bootstrap-3.1.1-dist/js/bootstrap.js" %}"></script>
<script type="text/javascript">window.__admin_media_prefix__ = "{% filter escapejs %}{% static "admin/" %}{% endfilter %}";</script>
</head>
...
Django est de servir mon admin OK, juste sans les fichiers statiques: CSS, JS, etc.
Fichiers statiques pour mon public face pages, beau travail.
Si je change STATIC_URL
à '/static/'
, puis le en face de est vrai: l'admin est très bien, mais mes pages publiques de perdre leurs fichiers statiques.
Voici le plus étrange de la partie. Si je "afficher la source" de mes pages d'administration dans mon navigateur, il affiche la bonne URL pour les pages statiques, par exemple:
/static/admin/css/base.css
Mais si j'ai fait suivre le lien, il change à ceci:
http://localhost:8000/admin/static/admin/css/base.css
Je pense que c'est la vérification pour les fichiers statiques par rapport à localhost:8000/admin/static/
au lieu de simplement localhost:8000/static/
. Il ajoute un supplément de "admin
" au niveau de l'url, comme static
fait partie du domaine. Je ne peux pas comprendre comment se débarrasser de lui.
J'ai essayé collectstatic
, mais il n'aide pas. Les fichiers statiques sont dans mon répertoire statique, ils sont tout simplement pas être servi. Je peux taper dans, disons, http://localhost:8000/static/admin/css/base.css
et je reçois le bon fichier CSS (en clair). Les fichiers sont là. Je parie que quelque chose est incorrect avec ma configuration.
J'ai vidé mes caches, redémarré mon serveur de dev, etc. Pas de haricots.
idées?
Vous n'avez pas besoin urlpatterns dans urls.py. Essayez de retirer et de vérifier par la mise en STATIC_URL = '/static/'
Je vous remercie de votre intuition. J'ai mis à jour mon code ci-dessus. J'ai aussi essayé de l'enlever
{% filter escapejs %}{% static "admin/" %}{% endfilter %}
en vain.Je ne suis pas sûr de ce que tu veux dire? Entendez-vous d'avoir juste un ensemble de
url(...)
s sans urlpatterns
wrappers?vous n'avez pas besoin, le code supplémentaire après si debug==TRUE.
OriginalL'auteur allanberry | 2014-05-19
Vous devez vous connecter pour publier un commentaire.
Utilisation
django-admin.py collectstatic
ou aller à~/django/contrib/admin/static
et copier le dossier admin(qui contient les fichiers statiques) et les coller dans votre projet d'annuaire statique.**EDIT**
Un désespéré ou maladroit solution, vous pouvez essayer: changer votre STATIC_URL " /static/', comme dans la question, j'ai vu ceci:
Puis vérifier avec
inspect element/firebug
, voir ce que les url sont servis dans les pages publiques. Probablement un '/' manquant ou ajout d'un '/'. Le régler, et voir si cela fonctionne.http://localhost:8000/static/admin/css/base.css
et je reçois le bon fichier CSS (en clair). Les fichiers sont là. Merci, mais... j'ai mis à jour ma question pour refléter votre idée.si vous avez trouvé le bon css par localhost:8000/static/admin/css/base.css ensuite, vos statistiques sont servis correctement. L'utilisation de firebug et voir ce que les urls sont que vous obtenez pour vos fichiers css, puis les ajuster en conséquence 🙂
merci, oui c'est ce que j'essaie de faire passer. J'ai été de passer du temps avec Firebug. Je ne sais pas comment les ajuster en conséquence."
bien que j'ai répondu à ce sujet dans la réponse de modifier l'article. Vérifier ce qui est manquant/ajoutée. probablement un '/'. Puis changement dans votre modèle en conséquence, par exemple href="{% statique 'foo/bar.css' %}" href="{% statique " /foo/bar.css' %}"
Firebug affiche le lien relatif. Il semble que Django est de servir les fichiers statiques en fonction de la
localhost:8000/admin/
de la racine au lieu de simplementlocalhost:8000/
. Si oui, ne savent pas comment le résoudre. J'ai mis à jour ma question. Une idée?OriginalL'auteur ruddra
OK, j'ai tout compris. Le problème dans mon cas a peu à voir avec tous les détails évoqués ci-dessus. Au lieu de cela, il y a une certaine confusion dans mes fichiers de paramètres, et je n'ai pas eu
STATICFILES_DIRS
correctement réglé.En fin de compte, j'ai mis en place le contrôle de version des fichiers de paramètres discutés dans Deux Cuillères de Django 1.6, avec cela dans mon
settings
:Avec cela, mes fichiers statiques sont servis correctement, à la fois dans l'admin et sans. Mes fichiers multimédia, d'autre part, n'a pas de travail sans changer mon
urls.py
en développement, en fonction de la accepté de répondre à ici. Je n'ai pas eu à faire la même chose pour mes fichiers statiques.De toute façon, j'espère que cela aide quelqu'un d'autre se frapper la tête contre ce mur.
OriginalL'auteur allanberry