FilePathField para la ruta de la imagen no funciona con el panel de administración de Django.
Nuevo en Django y en desarrollo web en general. Pero he seguido un tutorial para crear mi primer sitio. Todo funcionó bien, hasta que lo terminé y quise editar la información usando el panel de administración de Django.
El principal problema es que tengo un modelo que muestra a continuación que utiliza FilePathField para describir las ubicaciones de las imágenes. El tutorial me indicó colocar las imágenes en /home/pi/mysite/projects/static/img
.
from django.db import models
class Project(models.Model):
title = models.CharField(max_length=100)
description = models.TextField()
technology = models.CharField(max_length=20)
image = models.FilePathField('/img')
def __str__(self):
return self.title #or self.title for blog posts
Esto funcionó correctamente al principio para mostrar las imágenes en el sitio web, pero una vez que intenté navegar a la URL /change/
desde el panel de administración, obtuve el error FileNotFoundError at /admin/projects/project/1/change/
.
[Errno 2] No existe el archivo o el directorio: '/img'
Así que busqué y encontré que FilePathField es una ruta absoluta, así que intenté definirla absolutamente con /home/pi/mysite/projects/static/img/
. Esto evitó que ocurriera el error y al menos pude acceder a la URL /change/
desde el panel de administración. El panel ahora mostraba el campo de imagen con un menú desplegable para elegir entre las diferentes imágenes que tenía allí, que se encontraban en /home/pi/mysite/projects/static/img/
. Pero desde el panel de administración, una vez que hacía clic en guardar, las imágenes ya no se mostraban en el sitio. Al inspeccionar el elemento en el sitio web, parecía que intentaba extraer las imágenes de /static/projects/static/img
. Luego intenté mover las imágenes a /static/projects/static/img
, pero entonces ya no se mostraban en el cuadro desplegable del panel de administración y tampoco se mostraban en el sitio web.
Entonces, en este punto, estoy un poco confundido sobre dónde debería apuntar FilePathField para poder mostrar las imágenes en el sitio web y también cambiarlas a través del panel de administración.
davy.ai
El problema con la ruta del archivo en
FilePathField
se puede resolver utilizando rutas relativas en lugar de rutas absolutas.Primero, mueve la carpeta
img
a la carpetastatic
dentro de tu proyecto Django, por lo que debería estar ubicada en/home/pi/mysite/static/img/
.Luego, actualiza el campo
image
en el modeloProject
para que use una ruta relativa a la carpetaimg
:Esto te permitirá ver y cambiar las imágenes desde el panel de administración y mostrarlas en el sitio web. También es una buena práctica utilizar la etiqueta de plantilla
{% static %}
en tus plantillas HTML para asegurarte de que se use la ruta de archivo correcta. Por ejemplo:Esto garantizará que la ruta del archivo de imagen sea relativa a la configuración
STATIC_URL
en el archivo de configuración de tu proyecto Django.