Je n'arrive pas à faire monter mes fichiers statiques. J'ai essayé divers paramètres et configurations de répertoire, etc., mais ils se présentent sous la forme de 404. J'ai installé debug_toolbar, alors sachez que STATIC_URL est en train d'atteindre le contexte de ma demande.
Structure du répertoire affichant/statique (j'ai également placé le répertoire dans le dossier de l'application repas, ainsi que les utilisateurs, juste pour l'essayer.
/mealmate
/mealmate
/meals
/static
/css
/bootstrap.min.css
/templates
/users
Settings.py (quelques paramètres importants, bien que j'aie expérimenté de nombreux autres):
MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media/')
STATIC_URL = '/static/'
INSTALLED_APPS = (
'Django.contrib.auth',
'Django.contrib.contenttypes',
'Django.contrib.sessions',
'Django.contrib.sites',
'Django.contrib.messages',
'Django.contrib.staticfiles',
)
WSGI_APPLICATION = 'mealmate.wsgi.application'
Dans base.html rendu
<link rel="stylesheet" href="/static/css/bootstrap.min.css">
Des idées? Merci
C'est la solution de travail pour un accès statique/multimédia/modèle dans Django pour Windows,
settings.py
import os.path
STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = ( os.path.join('static'), )
Si vous l'exécutez sur un serveur Web, copiez-vous les fichiers statiques dans un dossier accessible au public? Par exemple:
# web accessible folder
STATIC_ROOT = '/home/your_name/www/mealmate/static/'
# URL prefix for static files.
STATIC_URL = '/static/'
# Additional locations of static files
STATICFILES_DIRS = (
# location of your application, should not be public web accessible
'/home/your_name/website/mealmate/static',
)
# List of Finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
'Django.contrib.staticfiles.finders.FileSystemFinder',
'Django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
Ensuite, vous pouvez utiliser cet article Fichiers statiques Django et copier les fichiers statiques dans le dossier public accessible à l’aide de manage.py.
# --link Create a symbolic link to each file instead of copying.
# --noinput Do NOT Prompt the user for input of any kind.
#
python manage.py collectstatic -link --noinput
J'espère que cela pourra aider!
Pour moi, cela a été causé par la définition de debug sur false dans settings.py
. Une solution de contournement consiste à passer le commutateur --insecure
à runserver
, mais la vraie solution consiste à utiliser un serveur Web approprié pour gérer les fichiers statiques. Voir les réponses à cette question pour plus de détails.
J'étais également coincé dans le problème 404 jusqu'à ce que je réalise que Apache avait bloqué les demandes du répertoire statique. J'ai utilisé python manage.py collectstatic
pour copier tous les fichiers statiques dans le répertoire static sous la racine de mon projet, c'est-à-dire/var/my/site/static . Avec
Alias /static /var/my/site/static
<Directory /var/my/site/static>
Require all granted
</Directory>
dans /etc/httpd/conf/httpd.conf , cela fonctionne correctement maintenant.
Si aucune des réponses ci-dessus ne fonctionne, vous pouvez envisager de vérifier la configuration de votre serveur.
J'ai simplement ajouté l'équivalent de
STATICFILES_DIRS = (
'/absolute_path_to_project/mealmate/static',
)
pour que cela fonctionne. Bien sûr, remplacez absolute_path_to_project
par votre chemin actuel et, si nécessaire, ajoutez la lettre du lecteur.
Assurez-vous que votre repas est dans votre INSTALLED_APPS
dans Django, vous avez un avantage supplémentaire pour vos modèles: vous pouvez lier des statistiques comme celle-ci et c’est peut-être votre problème!
<script src="{% static 'myapp/bootstrap.min.js' %}"></script>
<link href="{% static 'myapp/bootstrap.css' %}" rel="stylesheet" type="text/css"/>
il vaut mieux utiliser
{% static 'nom_fichier'%}
et c’est aussi plus facile. Pour en savoir plus, je me réfère à https://docs.djangoproject.com/fr/1.11/intro/tutorial06/
Je suppose que vous utilisez Django1.3 + ici.
Tout d’abord, vous devez définir quelques paramètres supplémentaires:
STATICFILES_FINDERS = [
'Django.contrib.staticfiles.finders.FileSystemFinder',
'Django.contrib.staticfiles.finders.AppDirectoriesFinder',
]
STATICFILES_DIRS = [
path.join(TOP_DIR, 'static'),
]
STATIC_ROOT = path.join(TOP_DIR, 'staticfiles')
STATIC_URL = '/static/'
Cela devrait vous aider à trouver ce répertoire.
De plus, vous devriez toujours accéder à vos fichiers statiques en utilisant STATIC URL
:
<link rel="stylesheet" href="{{ STATIC_URL }}css/bootstrap.min.css">
à partir des commentaires ci-dessus - lancez ceci
python manage.py findstatic --verbosity 2 css/styles.css
Aucun fichier correspondant trouvé pour 'css/styles.css'.
En regardant dans les endroits suivants:
/Utilisateurs/votrenom/Documents/Espace de travail/test/staticfiles
J'ai simplement renommé mon dossier static en staticfiles et tout allait bien. (Je suis sur osx + Django 1.x)
utiliser le mode non sécurisé peut ne pas nuire si vous êtes sur la boîte de dev locale - sinon vous risquez toujours d'avoir 404 erreurs.
python manage.py runserver --insecure
METTRE À JOUR
creuser dans settings.py a trouvé la ligne violée.
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'staticfiles'),
)
Dans mon cas, tout ce que je devais faire était de relancer le serveur:
python manage.py runserver
Je pense que vous avez manqué de mettre l'application INSTALLED_APPS dans votre fichier settings.py, vous devriez ajouter "mealmate"
INSTALLED_APPS = (
'mealmate',
'Django.contrib.auth',
'Django.contrib.contenttypes',
'Django.contrib.sessions',
'Django.contrib.sites',
'Django.contrib.messages',
'Django.contrib.staticfiles',
)
Après cela, les fichiers statiques et de commande seront visibles par Django. J'avais des problèmes avec les commandes et c'est comme ça que je l'ai corrigé.