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

1.2K
Vistas
Descargar un archivo con Django

Esta podría ser una pregunta simple, pero de alguna manera simplemente no puedo encontrar la solución. Django ofrece mucho sobre la carga de archivos, pero ¿cómo hago para descargar un archivo?

Supongamos que tenemos un botón en HTML en uploads/something.txt como archivo.

Probé con django.views.static.serve , sin embargo, lo que hizo fue abrir un archivo en la página web.

Mi pregunta es simple: ¿Cuál es la forma mejor y más pitónica para que el usuario de nuestro sitio web descargue un archivo?

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

  • Tienes que leer ese archivo.
  • Servirlo usando HttpResponse junto con el tipo de contenido adecuado.

Aquí hay un código de muestra:

 content = open("uploads/something.txt").read() return HttpResponse(content, content_type='text/plain')

Esto debería servir como un archivo de texto.

Pero como usted describió, en algunos navegadores, no le pedirá que descargue el archivo, sino que lo mostrará en el navegador. Si desea mostrar un aviso de descarga, use esto:

 response = HttpResponse(open("uploads/something.txt", 'rb').read()) response['Content-Type'] = 'text/plain' response['Content-Disposition'] = 'attachment; filename=DownloadedText.txt' return response

Sin embargo, tenga en cuenta que podría ser una mejor idea servir contenido estático o archivos cargados a través de nginx o el proxy inverso de su elección. Enviar archivos grandes a través de Django podría no ser la forma más óptima de hacerlo.

about 4 years ago · Santiago Trujillo Denunciar

0

import os from django.conf import settings from django.http import HttpResponse, Http404 def download(request, path): file_path = os.path.join(settings.MEDIA_ROOT, path) if os.path.exists(file_path): with open(file_path, 'rb') as fh: response = HttpResponse(fh.read(), content_type="application/vnd.ms-excel") response['Content-Disposition'] = 'inline; filename=' + os.path.basename(file_path) return response raise Http404
about 4 years ago · Santiago Trujillo Denunciar

0

Tal vez un poco tarde, pero aquí está mi solución:

 def render(self, value): return format_html('<a href="/media/{0}" download>{0}</a>', value)
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