Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

303
Visualizações
Django/JS: envía archivos a los usuarios, lo que se conoce como funcionalidad de descarga

Quiero permitir que los usuarios descarguen un archivo específico haciendo clic en el botón " Descargar ". El botón se vinculará con muchos conmutadores, por lo que escribí un script JS que cambia la etiqueta " href " para que apunte al archivo estático correcto.

Traté de seguir muchas preguntas de stackoverflow y leer documentación sobre Django staticfiles, archivos multimedia, pero no entendí lo que debo hacer en mi caso. Cualquier ayuda sería muy apreciada, permítanme presentarles lo que hice y pedirles su ayuda/opinión.

Quiero permitir que la gente descargue archivos que se pueden encontrar en:

 "/home/user/xxxx/xxx/project/my_app/static/"

Aquí está mi función en views.py :

 def send_file(request,file_name): from django.contrib.staticfiles.storage import staticfiles_storage import os from wsgiref.util import FileWrapper import mimetypes filename = staticfiles_storage.url(file_name) download_name = file_name wrapper = FileWrapper(open(filename)) content_type = mimetypes.guess_type(filename)[0] response = HttpResponse(wrapper, content_type=content_type) response['Content-Length'] = os.path.getsize(filename) response['Content-Disposition'] = "attachment; filename=%s" % download_name return response

Necesito la ruta exacta para abrir el archivo, así que lo que hice es definir en mi configuración STATIC_URL = "/home/user/xxxx/xxx/project/my_app/static/" . No me gusta esta solución, porque después de eso, si revisas mi fuente, tienes la ruta exacta de mi proyecto. Si STATIC_URL = "static/" no funciona. Busqué una forma de obtener la ruta exacta para el archivo estático pero no funcionó. ¿Alguna ayuda para esta parte?

urls.py :

 url(r'^download/static/(?P<file_name>[\w.]{0,256})$',views.send_file, name='send_file'),

template.html , solo la parte del botón:

 <a href="#" class="button" id="dl-link">Download</a>

JS , solo la parte que cuando hace clic en un conmutador, cambia la etiqueta href del botón HTML:

 "if you click on a switcher" id = switcher-checked var atag = document.getElementById("dl-link"); var url = "http://localhost:8000/test/download/static/"+id+".csv"; atag.setAttribute("href",url);

¿Hay alguna solución para usar la etiqueta {% url 'my_app:send_file%} en mi JS? Descubrí que una solución es poner el script directamente dentro de "template.html", ¿es un buen comportamiento?

Mi descarga funciona perfectamente, pero siento que todas mis opciones son bastante malas (STATIC_URL y JS var url definition). Sé que mi pregunta es bastante densa, pero realmente necesito esta ayuda. Cualquier ejemplo sería más que apreciado. Gracias.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Un par de puntos. el primero para STATIC_URL puede usar "/static/" con una barra inclinada que comienza y termina en lugar de una ruta completa. ya que está intentando descargar desde el mismo nombre de dominio, no es necesario usar la URL completa " http://localhost:8000/your-url ". Simplemente puede usar "/your-url" en la variable js var url.

Django no puede procesar archivos js, por lo que solo tenemos una opción, manteniéndola en template.html. Para un mejor mantenimiento del código js, intente declarar una variable global con direcciones URL en la plantilla al cargar el documento y utilícelas en su secuencia de comandos. Entonces esa parte del guión será clara. por ejemplo,

 var all_my_urls = { "url":"{% url 'my_app:send_file'%}" }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda