Как создать загружаемый URL для zip-файла в Django? - PullRequest
0 голосов
/ 27 января 2020

Я пытаюсь создать веб-страницу с таблицей, в которой один из столбцов этой таблицы загружает определенный файл, который находится на моем компьютере. Файл, который должен быть загружен, основан на идентификационном номере этой строки. (ID - это столбец в моей таблице)

Пример. Если пользователь нажимает на URL, который находится в 3-й строке, то файл с именем «3.zip» в моих локальных файлах должен быть загружен.

Я пробовал <a href="<path>" download> в моем файле шаблона HTML, но я понял, что в Django метод отличается. Затем я использовал HTTPResponse в качестве метода вложения.

Это мой код Views.py для загрузки.

def download_file(request):
    fl_path = '/home/harish/Desktop/cvision/users_output_files/5/5.zip'
    filename = '5.zip'

    with open(fl_path, 'r') as zip_file:
        response = HttpResponse(zip_file, content_type='application/force-download')
        response['Content-Disposition'] = 'attachment; filename="%s"'%filename
        return response

Urls.py

urlpatterns = [
    path('',views.homepage),
    path('add',views.datapage),
    path('newdata',views.newdata),
    path('newuser',views.newuser),
    path('download_file/',views.download_file)
]

Итак, когда я go к пути http://127.0.0.1:8000/download_file файл должен быть загружен. Но вместо этого я получаю ошибку.

'utf-8' codec can't decode byte 0xeb in position 10: invalid continuation byte

Если мы игнорируем ошибку кодирования, как я могу решить проблему загрузки определенного файла из локальных папок на основе идентификатора этой строки?

Ответы [ 2 ]

0 голосов
/ 27 января 2020

Но как мне решить проблему с идентификационным номером? Этот метод не извлекает значение идентификатора, поэтому я могу указать свой путь к pirtucular .zip-файлу?

Возможно, вы хотите создать таблицу, например, как blow

 {% for student in student_list %}
        <tr>
            <td>{{ forloop.counter }}</td>
            <td>{{ student.student_id }}</td>
            <td>{{ student.user.first_name }}</td>
            <td>{{ student.user.last_name }}</td>
            <td align="center"><a href="{{ MEDIA_URL }}/files/{{ forloop.counter }}.zip"></a>
        </tr>
    {% endfor %}

{{forl oop .counter}} это ваш идентификационный номер

0 голосов
/ 27 января 2020

У меня есть идея, лучше сохранить ваш файл в stati c или в папке media и добавить параметр media / stati c url root в файл urls.py

setting.py

 # Base url to serve media files
MEDIA_URL = '/media/'

# Path where media is stored
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')

urls.py

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    ...
]
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL,
                          document_root=settings.MEDIA_ROOT)

и, наконец, вы можете предоставить файл в шаблоне django со ссылкой, например,

<a href="{{ STATIC_URL }}/files/somefile"> download</a>

или

<a href="{{ MEDIA_URL }}/files/somefile"> download</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...