django url statique statique statique de la racine
Je suis confus par static root
et de vouloir clarifier les choses.
Pour servir les fichiers statiques dans Django, le suivant doit être dans settings.py
et urls.py
:
import os
PROJECT_DIR=os.path.dirname(__file__)
1. Chemin absolu vers le répertoire dans lequel les fichiers statiques devraient être recueillies
STATIC_ROOT= os.path.join(PROJECT_DIR,'static_media/')
2. Préfixe d'URL pour les fichiers statiques
STATIC_URL = '/static/'
3. Des emplacements supplémentaires pour les fichiers statiques
STATICFILES_DIRS = ( os.path.join(PROJECT_DIR,'static/'),)
...et dans urls.py
les lignes suivantes:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += patterns('', (
r'^static/(?P<path>.*)$',
'django.views.static.serve',
{'document_root': settings.STATIC_ROOT}
))
4. Nous utilisons également des python manage.py collectstatic
Questions:
-
Quelqu'un pourrait-il expliquer le flux de travail pour moi: comment les choses devraient idéalement être fait. Maintenant, j'ai copier/coller le code ci-dessus des extraits dans leurs emplacements désignés et continuer à faire de nouveaux fichiers dans le répertoire statique et il fonctionne. Dans mon
settings.STATIC_ROOT
, cependant, je l'ai déjà dit dans un autre répertoire. -
Ce serait génial si quelqu'un pouvait expliquer le flux de travail de chaque paramètre: la façon dont les fichiers sont collectés et gérés, et ce serait une bonne pratique à suivre.
Grâce.
- Pourriez-vous préciser ce que vous entendez par "d'expliquer le flux de travail'? aussi votre url modèles doivent être conditionnelle à ce que si vous êtes en développement dans la partie 3. vous pouvez le faire en ajoutant
if settings.DEBUG:
django n'est pas très bon à servir à la statique des médias, ce devrait être laissée à un vrai serveur web. - Salut @user993563 je ne peux même pas trouver la solution dans plusieurs forum ce que je veux. mais vos questions à l'expliquer clairement grâce de l'homme... du beau travail...
Vous devez vous connecter pour publier un commentaire.
STATIC_ROOT
maintenant la commande
./manage.py collectstatic
va copier tous les fichiers statiques(c'est à dire en statique dossier dans vos applications, vos fichiers statiques dans tous les chemins d'accès) dans le répertoire/var/www/example.com/static/
. maintenant vous avez seulement besoin de servir ce répertoire sur un serveur apache ou nginx, etc..STATIC_URL
Si vous définissez
STATIC_URL = 'http://static.example.com/'
, alors vous devez vous servir de laSTATIC_ROOT
dossier (c'est à dire"/var/www/example.com/static/"
) par apache ou nginx à l'adresse url'http://static.example.com/'
(de sorte que vous pouvez vous référer au fichier statique'/var/www/example.com/static/jquery.js'
avec'http://static.example.com/jquery.js'
)Maintenant dans votre django-modèles, vous pouvez le renvoyer par:
qui va rendre:
{{ STATIC_URL }}jquery.js
et{% static "jquery.js" %}
sont les mêmes. ie les deux sera de retour/static/jquery.js
. plus Récent django les versions recommandons d'utiliser{% static "jquery.js" %}
, mais vous devez charger le templatetag, c'est à dire{% load staticfiles %}
. dans plus âgés django la version recommande{{STATIC_URL}}
static
méthode au lieu deSTATIC_URL
méthode, et le bug a disparu. Bon appel sur la des suggestions basées sur des versions.STATICFILES_DIRS
: Vous pouvez conserver les fichiers statiques de votre projet, ici par exemple ceux utilisés par vos modèles.STATIC_ROOT
: laissez ce vide, lorsque vous nemanage.py collectstatic
, il recherche tous les fichiers statiques de votre système et de les déplacer ici. Votre fichier statique serveur est censé être mappée à ce dossier où il se trouve. Vérifier après l'exécution de collectstatic et vous trouverez la structure de répertoire de django a construit.-------- Modifier----------------
Comme l'a souligné @DarkCygnus, STATIC_ROOT doit pointer vers un répertoire sur votre système de fichiers, le dossier doit être vide car il sera rempli par Django.
ou
'
-------- Fin Edit -----------------
STATIC_URL
: '/statique/' est généralement très bien, c'est juste un préfixe pour les fichiers statiques.STATICFILES_DIRS
devrait servir supplémentaires répertoires pour les fichiers statiques.Si vous mettez tous vos css/js/images dans la APP_NAME/static/APP_NAME dossier,il n'est pas nécessaire de spécifierSTATICFILES_DIRS
.settings.py
(en faisantSTATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
) avant d'exécuter le collectstatic de commande.Toutes les réponses ci-dessus sont utiles, mais aucun n'a résolu mon problème. Dans mon fichier de production, mon STATIC_URL était
https://<URL>/static
et j'ai utilisé le même STATIC_URL dans mon dev settings.py fichier.Cela provoque un échec silencieux dans django/conf/urls/static.py.
Le test
elif not settings.DEBUG or '://' in prefix:
ramasse les "//" dans l'URL et ne pas ajouter de la statique du modèle d'URL, sans causer de fichiers statiques pour être trouvé.
Il serait réfléchie si Django cracher un message d'erreur indiquant que vous ne pouvez pas utiliser un
http(s)://
avecDEBUG = True
J'ai dû changer STATIC_URL d'être " statique//'