Отображение изображений по одному, когда пользователь нажимает кнопку next в Django

Я создал приложение django, в котором пользователь загружает несколько pdf файлов, а приложение конвертирует их в png и отображает изображения. Я использую ModelForms для этой цели. Загрузка и преобразование работают нормально, но как мне отобразить изображения последовательно ?

Я хочу отобразить одно изображение, и когда пользователь нажимает на кнопку next, должно отображаться следующее изображение. Ниже приведен код моего приложения:

models.py

from django.db import models
from django.contrib.auth.models import User

# Create your models here.

class UserUploadModel(models.Model):
    
    user = models.ForeignKey(User, on_delete = models.CASCADE, null = True)
    file = models.FileField(upload_to = 'file_uploads/%d%m%Y')

views.py

from django.shortcuts import render, redirect
from app1.forms import UserUploadForm
from app1.models import UserUploadModel
from app1.convert import convert_file
from app1.transfer import move_dir
import os
from project1 import settings

# Create your views here.

def home(request):
    
    if request.method == 'POST':
        form = UserUploadForm(request.POST, request.FILES)
        
        if form.is_valid():
            f = form.save()
            f.user = request.user
            f.save()
          
            ff = request.FILES.getlist('file')
            f_list = []

            for i in ff:
                file_instance = UserUploadModel(file = i)
                file_instance.save()
                f_list.append(file_instance.file.path)
            
            [convert_file(j) for j in f_list]

            src_dir = os.getcwd()
            dest_dir = os.path.join(src_dir, 'media/converted_files')            
            move_dir(src_dir, dest_dir, '*.png')
            
            return redirect('app1-display')
    else:
        form = UserUploadForm()
    return render(request, 'app1/home.html', {'form' : form})


def display(request):
    return render(request, 'app1/display.html')

home.html

{%extends "app1/base.html"%}
{%block content%}

    <form method="POST" enctype="multipart/form-data">
      {%csrf_token%}
      {{form.as_p}}
      <input type="submit">
    </form>

{%endblock content%}

Вы можете отобразить все изображения пользователя в вашем шаблоне и затем использовать javascript для скрытия и показа изображений :

app1/display.html

{% extends "app1/base.html" %}
{% block content %}

    {% for image in request.user.useruploadmodel_set.all %}
         <image src={{ image.url }} style="width: 100%{% if not forloop.first %}; display: none{% endif %}" />
    {% endfor %}
    <button id="nextBtn">Next</button

    <script>
        $(() => {
            $("#nextBtn").click(() => {
               $('image:visible').hide().next().show()
            })
        })
    </script>

{% endblock %}

Я использовал jquery, потому что я больше привык к нему, но это можно сделать с помощью другого фреймворка или ванильного JS.

Почему бы не использовать библиотеку JS-каруселей?

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