Gestionar la subida de múltiples imágenes con Django y Python es una tarea común en el desarrollo web. Aprende a configurar modelos, vistas y plantillas con soporte para archivos multimedia de forma sencilla y eficiente.
Si no tienes instalado virtualenv, puedes instalarlo globalmente:
pip install virtualenv # Instalar paquete virtualenv
virtualenv --version # Verificar versión
virtualenv env # Crear entorno virtual Otras opciones:
Usar el paquete que ya viene por defecto en las últimas versiones de Python:
python -m venv env Dependiendo del sistema operativo:
Windows:
. envScriptsactivate Mac/Linux:
. env/bin/activate Para desactivar el entorno virtual:
deactivate pip install Django Si necesitas una versión específica:
pip install Django==4.2.4 Verifica la versión instalada:
python -m django --version Pillow es la librería necesaria para procesar la subida de imágenes en el servidor:
pip install Pillow django-admin startproject project_core . El punto (.) al final indica que Django se instale en el directorio actual.
Ejecuta el servidor para verificar:
python manage.py runserver python manage.py startapp subir_multiples_imgs requirements.txtpip freeze > requirements.txt Para instalar los paquetes en otro entorno:
pip install -r requirements.txt settings.pyEdita el archivo settings.py:
INSTALLED_APPS = [
...,
'subir_multiples_imgs',
] settings.pyAgrega las siguientes configuraciones:
import os
MEDIA_URL = '/media/' # URL para acceder a las imágenes
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') # Directorio donde se guardan las imágenes Crea una carpeta llamada media al mismo nivel que tu proyecto project_core.
urls.pyEdita el archivo urls.py del proyecto:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# tus urls
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) models.pyCrea el modelo para almacenar imágenes:
from django.db import models
class Galeria(models.Model):
images = models.ImageField(upload_to='images/')
created_at = models.DateTimeField(auto_now_add=True, null=True, blank=True)
updated = models.DateTimeField(auto_now=True) python manage.py makemigrations
python manage.py migrate views.pyDefine las vistas para subir y listar imágenes:
from django.shortcuts import render, redirect
from .models import Galeria
import uuid
def inicio(request):
context = {'data': listarImagenes(request)}
return render(request, 'index.html', context)
def guardarMultiplesImgs(request):
if request.method == "POST":
images = request.FILES.getlist('images')
for image in images:
# Generar un nombre único para el archivo
unique_filename = str(uuid.uuid4()) + "_" + image.name
image.name = unique_filename
Galeria.objects.create(images=image)
return redirect('inicio')
def listarImagenes(request):
return Galeria.objects.all() index.htmlCrea un formulario para subir múltiples imágenes:
<form action="{% url 'guardarMultiplesImgs' %}" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="images" accept="image/*" multiple />
<button type="submit" class="btn btn-primary">Subir Imágenes</button>
</form>
<div>
{% for item in data %}
<img src="{{ item.images.url }}" alt="Imagen" style="width: 200px; margin: 10px;" />
{% endfor %}
</div> Inicia el proyecto:
python manage.py runserver 
Subir múltiples imágenes en Django es un proceso práctico y eficiente que amplía las posibilidades de tus aplicaciones web. Si buscas más ejemplos o inspiración, puedes explorar este repositorio:
Subir múltiples imágenes con Django