120 votes

Comment faire en sorte que Django serve des fichiers statiques avec Gunicorn ?

Je veux exécuter mon projet django sous gunicorn sur localhost. J'ai installé et intégré gunicorn. Lorsque je lance :

python manage.py run_gunicorn

Il fonctionne mais il n'y a pas de fichiers statiques (css et js).

J'ai désactivé debug et template_debug dans settings.py (en les rendant faux), mais c'est toujours pareil. Est-ce qu'il me manque quelque chose ?

J'appelle les statiques comme ça :

{{ STATIC_URL }}css/etc....

2voto

frost-nzcr4 Points 1102

Depuis Django 1.3, il y a django/conf/urls/static.py qui gère les fichiers statiques en mode DEBUG :

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Lire la suite https://docs.djangoproject.com/en/2.0/howto/static-files/#serving-static-files-during-development

1voto

Magnus Points 92

Si vous utilisez Apache/Gunicorn, voici comment j'ai configuré le mien.

  1. Dans le répertoire racine de votre Django (avec manage.py ), créer des répertoires mkdir -p django_static/static

  2. Dans votre projet settings.py définir les éléments suivants :

    DEBUG = False INSTALLED_APPS = [..., 'django.contrib.staticfiles', ...] STATIC_URL = 'static/' STATIC_ROOT = os.path.join(BASE_DIR, "django_static", "static")

  3. Exécuter python manage.py collectstatic . Le contenu statique sera envoyé à django_static/static

  4. Commencez votre gunicorn serveur avec gunicorn your_project_name.wsgi (plus options)

  5. En supposant que vous avez les paramètres globaux par défaut d'Apache, vous devrez créer un lien logiciel à partir de l'adresse suivante /var/www dans votre répertoire statique : sudo ln -s /path/to/your_django_project/django_static /var/www/your_django_project_static

  6. Pour votre domaine www.example.com que vous souhaitez faire pointer vers votre application Django, configurez l'hôte virtuel suivant dans apache afin d'envoyer par proxy toutes les requêtes soumises à https://www.example.com sur 127.0.0.1:8000 sauf para www.example.com/static/ (dans ce cas, servir des fichiers à ces demandes à partir de django_static ) :

    <VirtualHost *:443> ServerName www.example.com DocumentRoot /var/www/your_django_project_static <Location "/"> ProxyPreserveHost On ProxyPass http://127.0.0.1:8000/ ProxyPassReverse http://127.0.0.1:8000/ </Location> <Location "/static/"> ProxyPass "!" </Location> </VirtualHost>

Voilà !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X