Как загружать загруженные файлы с помощью django

#python #django #download #upload

#python #django #Скачать #загрузка

Вопрос:

Я видел много решений для этого здесь, но, похоже, у меня ничего не получается, так как я тоже новичок в django. По сути, на данный момент мои файлы корректно загружаются пользователем в media / documents, но когда я пытаюсь загрузить файлы из каталога, в терминале я получаю 404 и в итоге загружаю пустой файл. Допустим, исходный файл «test.txt «, прямо сейчас он загружает пустой «documents_test.txt «. На данный момент это то, что у меня есть для моего кода и как я пытаюсь загрузить в свой шаблон.

models.py

 class Program(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    description = models.CharField(max_length=128)
    upload = models.FileField(upload_to='documents/')
    category = models.ForeignKey(ProgramCategory, on_delete=models.CASCADE)
    is_public = models.BooleanField()
 

views.py

 def programs(request):
    # Create some default categories if there aren't any.
    if (not ProgramCategory.objects.all()):
        ProgramCategory.objects.create(category="Hobby")
        ProgramCategory.objects.create(category="School")
        ProgramCategory.objects.create(category="Work")

    '''if (request.method == "GET" and "toggle_completed" in request.GET):
        id = request.GET["toggle_completed"]
        task = Task.objects.get(id=id)
        task.is_completed = not task.is_completed
        task.save()'''
    
    if (request.method == "GET" and "delete" in request.GET):
        id = request.GET["delete"]
        Program.objects.all().filter(id=id).delete()
        return redirect("/programs/")

    if (request.method == "POST"):
        try:
            user_profile = UserProfile.objects.filter(user=request.user).get()
        except:
            user_profile = UserProfile()
            user_profile.user = request.user
            #user_profile.tasks_view_hide_completed = False

        #form = HideCompletedTasksForm(request.POST, instance=user_profile)

        if (form.is_valid()):
            form.save()
    
        user_profile = UserProfile.objects.filter(user=request.user).get()
        #hide_completed_form_data = HideCompletedTasksForm(instance=user_profile)
    #except:
        #hide_completed_form_data = HideCompletedTasksForm()

    #hide_completed = hide_completed_form_data["tasks_view_hide_completed"].value()
    #if (hide_completed):
        #table_data = Task.objects.select_related().filter(user=request.user, is_completed=False)
    else:
        table_data = Program.objects.all().filter(user=request.user)
    #filename = Program.objects.all().filter(user=request.user).values_list('upload')
    context = {
        #"hide_completed_form_data": hide_completed_form_data,
        "table_data": table_data,
    }
 

шаблон (programs.html )

     {% for row in table_data %}
    <tr>
      <td>{{ row.upload }}</td>
      <td>{{ row.description }}</td>
      <td>{{ row.category }}</td>

.
.
.
      <td>
        <a class="btn btn-primary" href="/programs/edit/{{ row.id }}/">Edit</a>
        <a class="btn btn-primary" href="#" onclick="confirmDeleteModal({{ row.id }})">Delete</a>
        <a class='btn btn-primary' href="{{ row.upload.url}}" download="{{ row.upload.url}}"> Download</a>

      </tr>
      {% endfor %}
      {% endif %}
 

Любая помощь будет принята с благодарностью.

Комментарии:

1. Почему многие строки кода закомментированы? Например, вы используете форму. Но код для определения формы закомментирован. Почему это так?

2. Кроме того, добавьте свой forms.py , чтобы все могли понять, как выглядит ваша форма.