Почему моя кнопка загрузки не работает, когда я пытаюсь загрузить загруженный файл

Я работаю над проектом Django. Я реализовал кнопку загрузки и скачивания. Кнопка загрузки работает правильно, но когда я нажимаю на кнопку загрузки, она сообщает мне, что файл, который я хочу загрузить, не существует - 'no file'. вот код. для views

def download(request, path):
    file_path = os.path.join(settings.MEDIA_ROOT, path)
    if os.path.exists(file_path):
        with open(file_path,'rb') as fh:
            response = HttpResponse(fh.read(), content_type='application/pdf')
            response['Content-Disposition'] = 'inline;filename='+os.path.basename(file_path)
            return response
    raise Http404
```

for ```url```
```
from django.urls import path
from . import views
from django.conf import settings
from django.views.static import serve
from django.urls import re_path
from django.conf.urls.static import static

app_name = 'projects'

urlpatterns = [
    path('', views.projects, name='projects'),
    path('new-project/', views.newProject, name='new-project'),
    path('new-task/', views.newTask, name='new-task'),
    re_path(r'^download/(?P<path>.*)$',serve, {'document_root':settings.MEDIA_ROOT}),
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
``` 
for ```html```
```
 {% for project in projects %}
                    <li class="my-2">
                        {% if project.status == '1' %}
                                <span class="badge badge-danger" style="width: 50px;">Stuck</span>
                            {% elif project.status == '2' %}
                                <span class="badge badge-info" style="width: 50px;">Working</span>
                            {% else %}
                                <span class="badge badge-success" style="width: 50px;">Done!</span>
                            {% endif %}
                        <span class="title ml-1">{{ project }}</span>

                        <span class="value"> <span class="text-muted small">deadline: </span>{{ project.dead_line }}
                            <span class="text-muted small">({{ project.complete_per }}%)</span>
                            <span> <a href="{{project.pdf.url}} download="{{project.pdf.url}}""><button type="button" class="btn btn-primary" style="margin-left:47px;">Download Project</button></a> </span>
                        </span>
                        <div class="bars">
                            <div class="progress progress-xs">
                                <div class="progress-bar bg-success" role="progressbar" style="width: {{ project.complete_per }}%" aria-valuenow="{{ project.complete_per }}" aria-valuemin="0" aria-valuemax="100"></div>
                            </div>
                        </div>
                    </li>
                    {% endfor %}
```

Попробуйте вернуть объект FileResponse.

def download(request, path):
    file_path = os.path.join(settings.MEDIA_ROOT, path)
    try:
        output_file = open(file_path, "rb")
    except FileNotFoundError:
        raise NotFound(
            detail="Requested file doesn't exist.",
        )
    return FileResponse(output_file, as_attachment=True)

Также вы можете проверить, правильно ли построен file_path.

Вернуться на верх