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

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

21.05.2019, 10:56. Показов 11649. Ответов 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
 Аватар для Рыжий Лис
5973 / 3735 / 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
 Аватар для Рыжий Лис
5973 / 3735 / 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
 Аватар для Рыжий Лис
5973 / 3735 / 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
 Аватар для Рыжий Лис
5973 / 3735 / 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
Ответ Создать тему
Новые блоги и статьи
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru