Django MEDIA_URL y MEDIA_ROOT

3 minutos de lectura

avatar de usuario
Dan

Estoy tratando de cargar una imagen a través del administrador de Django y luego ver esa imagen en una página en la interfaz o simplemente a través de una URL.

Tenga en cuenta que todo esto está en mi máquina local.

Mi configuración es la siguiente:

MEDIA_ROOT = '/home/dan/mysite/media/'

MEDIA_URL = '/media/'

Configuré el parámetro upload_to en ‘imágenes’ y el archivo se cargó correctamente en el directorio:

'/home/dan/mysite/media/images/myimage.png'

Sin embargo, cuando intento acceder a la imagen en la siguiente URL:

http://127.0.0.1:8000/media/images/myimage.png

Me sale un error 404.

¿Necesito configurar patrones URLconf específicos para los medios cargados?

Cualquier consejo apreciado.

Gracias.

Para Django 1.9, debe agregar el siguiente código según la documentación:

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)

Para obtener más información, puede consultar aquí: https://docs.djangoproject.com/en/1.9/howto/static-files/#servicio-de-archivos-cargados-por-un-usuario-durante-el-desarrollo

  • Esta es la solución para django >1.9, gracias.

    – unixeo

    11 de enero de 2016 a las 22:32

  • Solo asegúrese de poner esto en el urls.py de su proyecto y no de tu aplicación, lo que hice sin querer.

    – Jarno

    28 de abril de 2016 a las 16:05

  • Trabajó para mí en 1.10 también.

    – CoderGuy123

    17 de agosto de 2016 a las 22:42

  • no funciona para mi ¿Quizás hay alguna configuración subyacente necesaria en settings.py?

    – Fusión

    5 de mayo de 2017 a las 0:40

  • maravillosamente explicado: esta fue la respuesta para mí. la clave era agregando el procesador de contexto de medios.

    –David Maness

    11 oct 2019 a las 20:07


  • muy agradable context_processors inclinar

    – artu-hnrq

    3 de abril de 2021 a las 7:42

Si está utilizando python 3.0+, configure su proyecto como se muestra a continuación

Entorno

STATIC_DIR = BASE_DIR / 'static'
MEDIA_DIR = BASE_DIR / 'media'
MEDIA_ROOT = MEDIA_DIR
MEDIA_URL = '/media/'

URL principales

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

urlspatterns=[
........
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

avatar de usuario
gavin

Siguiendo los pasos mencionados anteriormente para =>3.0 para el modo de depuración

urlpatterns = [
...
]
+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Y también la parte que me atrapó, la URL estática anterior solo funcionó en el archivo urls.py de mi proyecto principal. Primero intentaba agregar a mi aplicación y me preguntaba por qué no podía ver las imágenes.

Por último, asegúrese de configurar lo siguiente:

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

En el entorno de producción, Django no carga la raíz de medios automáticamente, por lo que podemos superar ese problema agregando los siguientes códigos justo después de los patrones de URL:

urlpatterns = [
       ''''
         your urls
       ''''
    ] + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
    if settings.DEBUG:
        urlpatterns += static(settings.MEDIA_URL,
                              document_root=settings.MEDIA_ROOT)

Si está utilizando más de una aplicación y si está incluyendo URL de aplicaciones en la URL de la aplicación principal, simplemente agregue este código (configuración) en la URL principal del proyecto.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad