0

J'ai déployé un site Web avec django. Il sert tous les fichiers statiques mais ne sert pas les fichiers téléchargés par l'utilisateur. c'est mon settings.py et urls.py:django ne sert pas les fichiers téléchargés par l'utilisateur en production

import os 
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
DEBUG = False 

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

MEDIA_URL = '/files/' 
MEDIA_ROOT = os.path.join(BASE_DIR, 'uploaded_files') 

et urls.py:

urlpatterns = [ 
url(r'^admin/', admin.site.urls),  
url(r'^$', Index.as_view(), name='index'), 
] 

Dans les pages, il imprime l'utilisateur correctement les fichiers téléchargés adresses, mais ne les montre pas anf quand je clique sur les liens, il me montre 404 page. J'utilise la dernière version de nginx que j'ai prise dans les dépôts nginx. la version 1.12. est-il lié à django ou webserver (nginx + gunicorn)? et comment puis-je résoudre le problème?

Mise à jour Quand je change le MEDIA_URL et DEBUG True, pour la première fois il fonctionne et sert les fichiers téléchargés par l'utilisateur, mais si j'actualisez la page, il ne fonctionne pas! quel est le problème??

Répondre

0

vous devez définir urls.py

from django.conf.urls import include, url 
from django.conf.urls.static import static 
from django.conf import settings 
urlpatterns = [ 
      url(r'^admin/', admin.site.urls),  
      url(r'^$', Index.as_view(), name='index'), 
     ]+static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 
0

C'est parce que les fichiers statiques et les médias ne sont pas servis par django dans la production. Cest pourquoi ça marche quand vous faites DEBUG = True,

Ce que vous devez faire est de configurer un alias pour les fichiers multimédias dans votre config nginx pour votre site, dans votre bloc de serveur comme des fichiers statiques, comme ceci:

location /files/ { 
    autoindex on; 
    alias /home/your/project/uploaded_files/; 
    } 

N'oubliez pas de redémarrer votre nginx par la suite.