Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/55: Рейтинг темы: голосов - 55, средняя оценка - 4.93
1 / 1 / 1
Регистрация: 20.04.2017
Сообщений: 267

Ссылка на скачивание файла Django

21.05.2019, 10:56. Показов 11497. Ответов 15

Студворк — интернет-сервис помощи студентам
есть файл он лежит в папки media/xl2.xlsx мне надо по нажатию кнопки давать ссылку на скачивание этого файла.
вот так пытаюсь вызвать файл для скачивания. ни чего не происходит.
views.py
Python
1
2
3
4
def handle_uploaded_file(f):
            with open('media/xl2.xlsx', 'wb+') as destination:
                for chunk in f.chunks():
                    destination.write(chunk)
вот полный views.py
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
from django.shortcuts import render
from ecomapp.forms import LoginForm
from django.views.generic import CreateView
from django.contrib.auth import login, authenticate
from ecomapp.models import Wardrobes,Equipments,Etc
from django.http import HttpResponseRedirect, HttpResponse
from django.urls import reverse
from bs4 import BeautifulSoup
import xlrd, xlwt
import os
import json
import lxml.html
import shutil
from django.views import View
from xlutils.copy import copy as xlcopy
from django.views.decorators.csrf import csrf_exempt
from django.core.files import File
import openpyxl
 
def index(request):
    return render(request,'index.html', {})
 
def table1(request):
    etc = Etc.objects.all()
    wardrobes = Wardrobes.objects.all()
    prices = list(Wardrobes.objects.values_list('price', flat=True))
    equipments = Equipments.objects.all()
    quantity_or_meter = list(Wardrobes.objects.values_list('quantity_or_meter', flat=True))
    context = {
    'quantity_or_meter' : quantity_or_meter,
    'prices':prices,
    'wardrobes': wardrobes,
    'equipments': equipments,
    'etc' : etc
    }
    return render(request,'table1.html', context)
 
def base(request):
    return render(request,'base.html', {})
    
@csrf_exempt
def table(request):
    if request.POST:
        print(1)
        shutil.copy("media/xl1.xlsx", "media/xl2.xlsx") 
        destination_filename = "media/xl2.xlsx"
        print(2)
        d1 = request.POST["d1"]
        d2 = request.POST["d2"]
        d3 = request.POST["d3"]
        d4 = request.POST["d4"]
        a = request.POST["a"]
        b2 = request.POST["b2"]
        b3 = request.POST["b3"]
        b4 = request.POST["b4"]
        c2 = request.POST["c2"]
        print(3)
        print("d1=", d1)
        wb = openpyxl.load_workbook('media/xl2.xlsx')
        print(4)
        worksheet = wb['Лист1'] 
        worksheet["B4"]= d1
        worksheet["C4"]= d2
        worksheet["D4"]= d3
        worksheet["E4"]= d4
        worksheet["B5"]= a
        worksheet["C6"]= b2
        worksheet["D6"]= b3
        worksheet["E6"]= b4
        worksheet["C7"]= c2
        print("d1=", d1)
        print(5)
        wb.save('media/xl2.xlsx')
        print(6)
        def handle_uploaded_file(f):
            with open('media/xl2.xlsx', 'wb+') as destination:
                for chunk in f.chunks():
                    destination.write(chunk)
        print(7)
        print("d1=", d1)
    return render(request,'table.html', {})
 
 
def login_view(request):
    forms = LoginForm(request.POST or None)
    if forms.is_valid():
        username = forms.cleaned_data['username']
        password = forms.cleaned_data['password']
        login_user = authenticate(username=username, password=password)
        if login_user:
            login(request, login_user)
            return HttpResponseRedirect(reverse('base'))
    context = {
    'forms': forms
    }
    return render(request, 'index.html', context)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.05.2019, 10:56
Ответы с готовыми решениями:

Скачивание файла в Django
Доброго времени суток всем .у меня реализован на сайте не большой конвертер который берет ссылку с ютуба конвертирует ее в мр3 и отправляет...

Ссылка на скачивание файла
Здравствуйте! есть такая ссылка <a href="" type="application/file"></a> добавляю в нее адрес и по клику, вместо скачки происходит...

Ссылка на скачивание файла
Что -то у меня катастрофические проблемы с созданием ссылок на разрешение скачать файл. Помогите мне будьте добры. Прочитав тему...

15
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
25.05.2019, 15:57
Файл "генерится на лету"? Или не изменяется и просто лежит на диске?

Добавлено через 1 минуту
Python
1
return FileResponse(open('media/xl2.xlsx', 'rb'))
0
1 / 1 / 1
Регистрация: 20.04.2017
Сообщений: 267
25.05.2019, 16:21  [ТС]
Рыжий Лис, он берет файл и копирует затем скопируемый файл изменяет и сохраняет изменения. Мне же надо после всей этой процедуры выдать на скачивание данный файл(который измененный и сохранённый)

Добавлено через 20 минут
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
return FileResponse(open('media/xl2.xlsx', 'rb'))
как он импортируется
return FileResponse(open('media/xl2.xlsx', 'rb'))
NameError: name 'FileResponse' is not defined

Добавлено через 3 минуты
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
return FileResponse(open('media/xl2.xlsx', 'rb'))
все нашел как за импортировать но он не дает его на скачивание
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
@csrf_exempt
def table(request):
    if request.POST:
        print(1)
        shutil.copy("media/xl1.xlsx", "media/xl2.xlsx") 
        destination_filename = "media/xl2.xlsx"
        print(2)
        d1 = request.POST["d1"]
        d2 = request.POST["d2"]
        d3 = request.POST["d3"]
        d4 = request.POST["d4"]
        a = request.POST["a"]
        b2 = request.POST["b2"]
        b3 = request.POST["b3"]
        b4 = request.POST["b4"]
        c2 = request.POST["c2"]
        print(3)
        print("d1=", d1)
        wb = openpyxl.load_workbook('media/xl2.xlsx')
        print(4)
        worksheet = wb['Лист1'] 
        worksheet["B4"]= int(d1)
        worksheet["C4"]= int(d2)
        worksheet["D4"]= int(d3)
        worksheet["E4"]= int(d4)
        worksheet["B5"]= int(a)
        worksheet["C6"]= int(b2)
        worksheet["D6"]= int(b3)
        worksheet["E6"]= int(b4)
        worksheet["C7"]= int(c2)
        print("d1=", d1)
        print(5)
        wb.save('media/xl2.xlsx')
        print(6)
        
        print(7)
    return FileResponse(open('media/xl2.xlsx', 'rb'))
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
25.05.2019, 16:26
Цитата Сообщение от Lastik228 Посмотреть сообщение
все нашел как за импортировать но он не дает его на скачивание
Что в браузер возвращается?
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
25.05.2019, 16:41
Возможно, заголовки нужно установить.
https://docs.djangoproject.com... et_headers
0
1 / 1 / 1
Регистрация: 20.04.2017
Сообщений: 267
25.05.2019, 19:15  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Что в браузер возвращается?
сори чутка косякнул. при работе кода сверху он сразу без нажатия кнопки давал его сразу скачать.
вот чутка по поменял местами но он все равно не хочет . в браузере ошибок 0 и в терминали доходит до print(7)
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
@csrf_exempt
def table(request):
    if request.POST:
        print(1)
        shutil.copy("media/xl1.xlsx", "media/xl2.xlsx") 
        destination_filename = "media/xl2.xlsx"
        print(2)
        d1 = request.POST["d1"]
        d2 = request.POST["d2"]
        d3 = request.POST["d3"]
        d4 = request.POST["d4"]
        a = request.POST["a"]
        b2 = request.POST["b2"]
        b3 = request.POST["b3"]
        b4 = request.POST["b4"]
        c2 = request.POST["c2"]
        print(3)
        wb = openpyxl.load_workbook('media/xl2.xlsx')
        print(4)
        worksheet = wb['Лист1'] 
        worksheet["B4"]= int(d1)
        worksheet["C4"]= int(d2)
        worksheet["D4"]= int(d3)
        worksheet["E4"]= int(d4)
        worksheet["B5"]= int(a)
        worksheet["C6"]= int(b2)
        worksheet["D6"]= int(b3)
        worksheet["E6"]= int(b4)
        worksheet["C7"]= int(c2)
        print(5)
        wb.save('media/xl2.xlsx')
        print(6)
        FileResponse(open('media/xl2.xlsx', 'rb'))
        print(7)
    return render(request,'table.html', {})
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
25.05.2019, 19:16
Python
1
return FileResponse(open('media/xl2.xlsx', 'rb'))
0
1 / 1 / 1
Регистрация: 20.04.2017
Сообщений: 267
25.05.2019, 19:22  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
return FileResponse(open('media/xl2.xlsx', 'rb'))
ругается на другой return
Миниатюры
Ссылка на скачивание файла Django  
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
25.05.2019, 20:18
Ругается скорей всего на недостижимый код. Убери принт(7)
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
25.05.2019, 20:20
Lastik228, с чего вы это взяли? как именно "ругается"?
а может, нужно заголовки установить, как в доках сказано?
0
1 / 1 / 1
Регистрация: 20.04.2017
Сообщений: 267
26.05.2019, 16:06  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Ругается скорей всего на недостижимый код. Убери принт(7)
он доходит до prin(6) и дальше не идет

Добавлено через 5 минут
Цитата Сообщение от m0nte-cr1st0 Посмотреть сообщение
ужно заголовки установить
а где я косякнул с заголовками?
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
26.05.2019, 16:11
Lastik228, https://docs.djangoproject.com... et_headers
0
1 / 1 / 1
Регистрация: 20.04.2017
Сообщений: 267
26.05.2019, 16:23  [ТС]
m0nte-cr1st0,
сделал но он выдает ошибку
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
@csrf_exempt
def table(request):
    if request.POST:
        print(1)
        shutil.copy("media/xl1.xlsx", "media/xl2.xlsx") 
        destination_filename = "media/xl2.xlsx"
        print(2)
        d1 = request.POST["d1"]
        d2 = request.POST["d2"]
        d3 = request.POST["d3"]
        d4 = request.POST["d4"]
        a = request.POST["a"]
        b2 = request.POST["b2"]
        b3 = request.POST["b3"]
        b4 = request.POST["b4"]
        c2 = request.POST["c2"]
        print(3)
        wb = openpyxl.load_workbook('media/xl2.xlsx')
        print(4)
        worksheet = wb['Лист1'] 
        worksheet["B4"]= int(d1)
        worksheet["C4"]= int(d2)
        worksheet["D4"]= int(d3)
        worksheet["E4"]= int(d4)
        worksheet["B5"]= int(a)
        worksheet["C6"]= int(b2)
        worksheet["D6"]= int(b3)
        worksheet["E6"]= int(b4)
        worksheet["C7"]= int(c2)
        print(5)
        wb.save('media/xl2.xlsx')
        print(6)
        def __init__(self, *args, as_attachment=False, filename='media/xl2.xlsx', **kwargs):
            self.as_attachment = as_attachment
            self.filename = filename
            super().__init__(*args, **kwargs)
 
        def _set_streaming_content(self, value):
            if not hasattr(value, 'read'):
                self.file_to_stream = None
        return super()._set_streaming_content(value)
        print(7)
    return render(request,'table.html', {})
Миниатюры
Ссылка на скачивание файла Django  
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
26.05.2019, 17:17
Lastik228, что за дичь вы делаете?.. похоже, вы азов питона даже не знаете. куда вам за джанго браться...
https://docs.djangoproject.com... et_headers
0
1 / 1 / 1
Регистрация: 20.04.2017
Сообщений: 267
28.05.2019, 10:11  [ТС]
m0nte-cr1st0, а здесь что не так?
Миниатюры
Ссылка на скачивание файла Django  
0
1 / 1 / 1
Регистрация: 20.04.2017
Сообщений: 267
30.05.2019, 10:25  [ТС]
Цитата Сообщение от m0nte-cr1st0 Посмотреть сообщение
что за дичь вы делаете?
ответь пожалуйста. я решил немного по другому дернуть файл и закинул его в static из из статика хочу дернуть уже на закачку но он не хочет мне отдавать его, я думаю это потому что вначале работает код js я правильно понимаю или нет?
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 <a  id="test" href='{% static "media/xl2.xlsx" %}'  class="btn btn-success">Вывод в Excel</a> 
 
<script type="text/javascript">
  
 $(document).ready(function() {
    $('#test').click(function (event) {
      event.preventDefault();
      var d1 = document.getElementById("d1");
      var d2 = document.getElementById("d2");
      var d3 = document.getElementById("d3");
      var d4 = document.getElementById("d4");
      var a = document.getElementById("a");
      var b2 = document.getElementById("b2");
      var b3 = document.getElementById("b3");
      var b4 = document.getElementById("b4");
      var c2 = document.getElementById("c2");
      console.clear();
      console.log(d1.innerHTML);
      console.log(d2.innerHTML);
      console.log(d3.innerHTML);
      console.log(d4.innerHTML);
      console.log(a.innerHTML);
      console.log(b2.innerHTML);
      console.log(b3.innerHTML);
      console.log(b4.innerHTML);
      console.log(c2.innerHTML);
      $.post("/table/", { "d1": d1.textContent,"d2": d2.textContent,"d3": d3.textContent,"d4": d4.textContent,"a": a.textContent,"b2": b2.textContent,"b3": b3.textContent,"b4": b4.textContent,"c2": c2.textContent},  function (response) {
      });
    });
});
</script>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.05.2019, 10:25
Помогаю со студенческими работами здесь

Ссылка на скачивание файла
Добрый день, у меня есть свой удаленный сервер на котором размещен мой сайт (например 127.0.0.1:8080/index.php), но я хочу сделать чтобы...

Ссылка на скачивание файла
Здравствуйте. Предстала такая проблема: при задании прямой ссылки на файл, лежащий на хостинге через &lt;a href=&quot;&quot; donwload&gt;...

Скачивание файла по ссылке, если ссылка иногда меняется
Добрый день. Подскажите, как можно реализовать такую вещь. Есть вот эта страничка: https://www.avg.com/ru-ru/download.prd-arl Там есть...

Ссылка на скачивание
Дайте пожалуйста ссылку на скачивание Delphi 7, exe 5. Заранее спасибо.

Ссылка на скачивание
Начал изучать html и столкнулся с проблемой. Автор в видео говорит &quot;чтобы создать ссылку на скачивание пишем - &lt;a...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru