es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , ,

Answer

  1. Avatar for 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 carpeta static 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 modelo Project para que use una ruta relativa a la carpeta img:

    class Project(models.Model):
        title = models.CharField(max_length=100)
        description = models.TextField()
        technology = models.CharField(max_length=20)
        image = models.FilePathField(path='static/img/')
        def __str__(self):
            return self.title
    

    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:

    <img src="{% static project.image %}">
    

    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.

Comments are closed.