Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

686
Vistas
Django MEDIA_ROOT, MEDIA_URL, etc.

Esta es la primera vez que uso MEDIA_ROOT/MEDIA_URL y la configuración me confunde un poco. Tengo un formulario de carga de imágenes que guarda la imagen original más una copia redimensionada. Quiero guardar ambas imágenes en mi carpeta MEDIA, pero separarlas. Estructura actual:

 project/ ----apps/ --------appOne/ ------------static/ ------------templates/ ------------__init__.py ------------models.py ------------urls.py ------------views.py --------__init__.py/ ----MEDIA/ ----project/ --------__init__.py --------settings.py --------urls.py ----manage.py

Me gustaría guardar la imagen cargada original en MEDIA/ y la imagen redimensionada en una carpeta dentro de la carpeta MEDIA, como MEDIA/media/. En este momento, está anidando 3 veces:

 original image goes to ---> MEDIA/media/ resized image goes to ---> MEDIA/media/media

Estoy casi seguro de que tengo la configuración incorrecta, pero he estado jugando con ella durante demasiado tiempo y nada funciona. Parece que cada tutorial configura las cosas de manera diferente y no estoy seguro de cuál es la estructura preferida o por qué mi configuración actual no funciona como esperaba.

Aquí está mi configuración.py:

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

modelos.py:

 from django.conf import settings from smartfields import fields from smartfields.dependencies import FileDependency from smartfields.processors import ImageProcessor class Image(models.Model): client = models.ForeignKey(Client, null=True, blank=True) model_pic = fields.ImageField(upload_to=settings.MEDIA_URL, dependencies=[ FileDependency(processor=ImageProcessor( format='PNG', scale={'max_width': 500, 'max_height': 500})) ])

vistas.py:

 def upload(request): form = ImageUploadForm(request.POST, request.FILES) if form.is_valid(): client = Client.objects.get(id=request.session['id']) image = Image.objects.create(client=client, model_pic=form.cleaned_data['image']) return redirect(reverse('cphh:gallery')) def show_images(request): context = { 'images': Image.objects.all().order_by('-created_at'), 'media_url': settings.MEDIA_URL, } return render(request,'cphh/gallery.html', context)

Las imágenes cargadas anidadas triples se representan correctamente en mi plantilla:

 {% for image in images %} <img class="gallery-image" src="{{media_url}}{{ image.model_pic }}" {% endfor %}
about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Según la documentación

MEDIA_ROOT es la ruta absoluta del sistema de archivos al directorio que contendrá los archivos subidos por el usuario.

Su código que envía las imágenes cargadas a la raíz debe tener settings.MEDIA_ROOT/<sub-folder> en lugar de settings.MEDIA_URL

MEDIA_URL , por otro lado, es un marcador de posición para la url que un cliente debe presionar para acceder a sus medios. Esto es útil cuando no desea mantener sus medios en su sistema de archivos local, sino en un almacenamiento externo como amazon s3.

El uso {{MEDIA_URL}} en sus plantillas le brinda una buena manera de no codificar la ubicación final de los medios.

about 4 years ago · Santiago Trujillo Denunciar

0

en primer lugar en la configuración.py MEDIA_URL debe ser así:

 MEDIA_URL = "/media/"

Luego elimine la carpeta MEDIA . Solo la carpeta multimedia es suficiente. y también si necesita miniaturas para sus imágenes cargadas, puede usar el paquete Django easy_thumbnails para esto

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda