Perdu dans la configuration des fichiers statiques

a marqué ce sujet comme résolu.
Auteur du sujet

Bonjour à tous,

J’ai développé un petit site sous Django, et j’ai un problème avec les fichiers statiques. En effet, je m’embrouille avec qui fait quoi, et du coup, mon python manage.py collectstatic ne fonctionne pas :(

Voici ma configuration :

settings.py

1
2
3
4
5
6
7
8
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
]
STATIC_ROOT = os.path.join(BASE_DIR, 'static_files')

Nginx :

1
2
3
location /static/ {
        root /home/theo/Web/miniheadquarters;
    }

Or, lorsque j’exécute python manage.py collectstatic, Django me dit que ces fichiers existent déjà et ne fait du coup rien… Une idée de ce qui bloque ?

Merci d’avance :)

+0 -0

Cette réponse a aidé l’auteur du sujet

Salut !

Ce n’est pas forcément une solution universelle et il y a peut-être plus simple pour un petit projet, mais pour les projets moyens/gros on met généralement les fichiers statiques dans un autre dossier, et la commande collectstatic se charge de les copier dans le dossier approprié.

Par exemple sur Zeste de Savoir, les fichiers statiques faits "à la main" sont placés dans un dossier assets. La commande collectstatic (sur ZdS c’est une autre commande qui est utilisée, mais le principe est le même) se charge ensuite de copier ces fichiers dans le dossier static, où elle copie également les fichiers fournis de base par Django pour les vues d’administration.

Du coup, voilà à quoi peut ressembler le settings.py. ;)

1
2
3
4
5
6
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static")

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "assets"),
]

Pour résumer, les fichiers modifiables sont stockés dans les dossiers indiqués dans STATICFILES_DIRS (assets ici ou static_files dans ton cas) puis copiés dans le dossier indiqué dans STATIC_ROOT par la commande collectstatic. ;)

"Les accidents dans un système doivent se produire, mais il n’est pas obligatoire qu’ils produisent pour vous et moi." Laurence Gonzales - Deep Survival

+0 -0

De ce que j’ai pu trouver sur internet, il faudrait quelque chose comme alias /home/theo/Web/miniheadquarters/static/;. Cependant, je ne connais quasiment pas Nginx, donc mieux vaut attendre qu’un connaisseur passe ici au cas où je dirais une connerie. ;)

"Les accidents dans un système doivent se produire, mais il n’est pas obligatoire qu’ils produisent pour vous et moi." Laurence Gonzales - Deep Survival

+0 -0

C’est tout à fait ça.

pour la variable settings.py : STATIC_ROOT = "/home/apps/run/projet/static/"

tu ajoutes une section dans la definition du serveur dans nginx :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
server{

...
    location /static {
        access_log      /var/log/nginx/projet-static.access.log;
        error_log       /var/log/nginx/projet-static.error.log;

        root /home/apps/run/projet/;
    }

}
+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte