/ / Impossible d'ouvrir le fichier enregistré dans Django Admin - django, fichier, http-status-code-404, admin

Impossible d'ouvrir le fichier enregistré dans Django Admin - django, fichier, http-status-code-404, admin

Je peux enregistrer avec succès un fichier via l’administrateur Django dans l’un de mes modèles, mais je ne peux pas ouvrir le fichier ultérieurement. Voici mon modèle:

class Answer (models.Model):
answer = models.CharField(max_length=1000)
attach_file = models.FileField(upload_to="Attachments", blank=True)

Je n'ai pas touché le fichier de paramètres et, à ma connaissance, il devrait utiliser les valeurs par défaut:

MEDIA_ROOT = ""
MEDIA_URL = ""
STATIC_ROOT = ""

J'ai enregistré le modèle dans le fichier admin.py et j'ai pu parcourir un fichier et l'enregistrer. En essayant d'ouvrir ce fichier, je reçois:

Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:8000/admin/businessui/answer/1/Attachments/outlook.png/
answer object with primary key u"1/Attachments/outlook.png" does not exist.

Quelqu'un pourrait-il indiquer ce qui me manque ici pour pouvoir également ouvrir des fichiers sauvegardés localement sur ma machine de développement?

Réponses:

2 pour la réponse № 1

En référence au commentaire de @Sawwy sur la réponse de @RicardoCarmo. Je poste comme une réponse pour le formatage.

Voici ce que j’utilise dans mon URL principale:

if getattr(settings, "DEBUG", False) or getattr(settings, "DEBUG_MEDIA", False):
media_url = getattr(settings, "MEDIA_URL", "/media/").lstrip("/")
urlpatterns = patterns("",
url(r"^%s(?P<path>.*)$" % (media_url,), "django.views.static.serve", {
"document_root": settings.MEDIA_ROOT
}),
) + urlpatterns

Notez que dans un environnement de production, vos fichiers multimédia doivent être servis par le serveur Web et que ces demandes ne doivent pas atteindre Django. C'est pourquoi il est qualifié avec if DEBUG or DEBUG_MEDIA.


5 pour la réponse № 2

Essayez de définir votre settings.py comme ceci:

import os
PROJECT_ROOT_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir))

MEDIA_ROOT = os.path.join(PROJECT_ROOT_PATH, "media/")
MEDIA_URL = "/media/"

Alors, essayez de mettre votre fichier dans:

http://127.0.0.1:8000/media/Attachments/outlook.png