включение кнопки загрузки django для загрузки в формате PDF - PullRequest
1 голос
/ 20 июня 2020

Я пытаюсь настроить кнопку django, чтобы я мог загрузить файл. Я пробовал следовать руководству, но думаю, что что-то упустил. Код urls.py ниже - это файл urls.py, который я создал в разделе приложения моего проекта. Я не уверен, что это правильный вариант. Код ниже не работает, локальный хост не загружает страницу. однако, когда я комментирую url('download_my_pdf', download_pdf), в моем urls.py, сайт загружается, так как у нас нет этой ссылки на код в представлениях.

ИНДЕКС. HTML:

<input type="button" value="Download" onclick="window.open('download_my_pdf')">

VIEWS.PY:

from django.shortcuts import render
from django.http import HttpResponse
from wsgiref.util import FileWrapper

def index(request):
return render(request, "index.html", {})

def home(request):
return render(request, "home.html", {})

def download_pdf(request):
filename = 'faults.pdf'
content = FileWrapper(filename)
response = HttpResponse(content, content_type='application/pdf')
response['Content-Length'] = os.path.getsize(filename)
response['Content-Disposition'] = 'attachment; filename=%s' % 'faults.pdf'
return response

URLS.PY

from django.urls import url
from django.urls import path

from . import views

urlpatterns = [
 path('', views.index, name="index"),
 path('home', views.home, name="home"),
 url('download_my_pdf', download_pdf),
]

enter image description here

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

для вашего кода, попробуйте «views.download_pdf» в вашем файле urls, вы используете его без импорта

0 голосов
/ 20 июня 2020

views.py

from django.http import HttpResponse, Http404

def open_file(request, *args, **kwargs):
    path = str(kwargs['p'])

    file_path = 'your 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

шаблоны / шаблон. html

                            <a class="button" href="{% url 'open-file' path %}">Download</a>

urls.py

path('open/<str:path>/', views.open_file, name='open-file'),
...