Как я могу создать ссылку для скачивания, используя django? - PullRequest
0 голосов
/ 03 августа 2020

Я использую свой собственный проект, используя django. Я пытаюсь загрузить файл, используя django. Я завершил загрузку файла с использованием django. но я не знаю, как создать ссылку для скачивания файла в django. example) test. java, а мой домен - example.com, порт - 9001, а медиа-папка - / media, я просто хочу вниз https://example.com: 9001 / media / test. java просто как это. Я гуглил все методы, но понятия не имею .. вот мой код. view.py -> часть загрузки

@csrf_exempt
def index(request):
    return render(request, 'useraccount/index.html', {})

@csrf_exempt
def file_list(request):
    return render(request, 'useraccount/list.html', {})

@csrf_exempt
def upload_file(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect('file_list')

    else:
        form = UploadFileForm()
    return render(request, 'useraccount/upload.html', {'form': form})

загрузка. html

<html>
    <head><title>Upload Test</title></head>
    <body>
        <form action="upload/"
              method="post"
              enctype="multipart/form-data">
            File:
            <input type="file"
                   name="file"
                   id="id_file" />
            <input type="submit" value="UPLOAD" />
        </form>
    </body>
</html>

загрузка. html

{% extends 'useraccount/index.html' %}

{%  block content %}
    <h2>Upload file</h2>
    <form method="post" enctype="multipart/form-data">
        {% csrf_token %}
        {{ form }}
        <button type="submit">Upload file</button>
    </form>
{% endblock %}

список. html

{% extends 'useraccount/index.html' %}

{% block content %}
    <h2>The image has been uploaded!!</h2>

{% endblock %}

forms.py

from django import forms
from .models import UploadFileModel

class UploadFileForm(forms.ModelForm):
    class Meta:
        model = UploadFileModel
        fields = {'title', 'file'}

url.py

from django.urls import path, include
from django.conf.urls import url
from . import views
from django.conf import settings
from django.conf.urls.static import static

  path('upload/', views.upload_file, name='upload_file'),
    path('list/', views.file_list, name='file_list'),
] + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)

Ответы [ 2 ]

0 голосов
/ 03 августа 2020

Чтобы загрузить изображение, хранящееся в базе данных, это будет:

Простой пример

views.py

def download_image(self, imageid):
    image = UploadFileModel.objects.get(pk=imageid)
    image_buffer = open(image.file.path, "rb").read()
    content_type = magic.from_buffer(image_buffer, mime=True)
    response = HttpResponse(image_buffer, content_type=content_type);
    response['Content-Disposition'] = 'attachment; filename="%s"' % os.path.basename(image.file.path)
    return response

urls.py

path('downloadimage/<str:imageid>/$', views.download_image, name='download_image'),

шаблон. html

<a href="{% url 'useraccount:download_image' imageid=<id_of_image> %}" type="button">Download image</a>

Примечание: Пожалуйста, замените <id_of_image> в шаблоне на требуемый идентификатор изображения.

0 голосов
/ 03 августа 2020

вы можете сгенерировать url файл с помощью url таких методов:

в .py:

my_file_field.url

в шаблоне:

<a href="{% my_file_field.url %}"> file link ! </a>

см. django c https://docs.djangoproject.com/en/dev/topics/files/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...