Рендеринг локальных веб-страниц в виде iFrame в Django

У меня есть представление, которое загружает zip-файл, проверяет, содержит ли он файл index.html, и распаковывает его в определенную папку в статическом каталоге. Я хочу иметь возможность просмотреть это, перейдя на страницу, где есть iFrame, указывающий на эту директорию, и пользователь сможет перемещаться внутри этой html-страницы. Но я не могу заставить это работать.

Вот функция, которая загружает zip-файл, и представление, которое ее использует:

views.py:

@user_passes_test(lambda u: u.is_staff or u.is_superuser)
def createCategory(request):
    if request.method == "POST":
        name = request.POST.get("name_kw")
        lang = request.POST.get("lang_kw")
        moduleid = request.POST.get("module_kw")
        zip = request.FILES.get("zip_kw")

        category = Category()
        category.name = name
        category.lang = lang
        category.module = Module.objects.get(id=moduleid)
        category.zip = zip
        category.created_by = request.user

        try:
            if zip.name.endswith(".zip"):
                rtn = publish_doc(category.name, zip)
                if rtn == "No index file found":
                    messages.error(
                        request,
                        "Pas de fichier index.html détecté. Assuez-vous qu'un fichier index.html est présent dans votre fichier ZIP",
                    )
                    return redirect("categoryList")
                else:
                    category.root = rtn
                    category.save()
                    messages.success(request, "Catégorie créée avec succès")
                    print("categorie et zip créées")
                    return redirect("categoryList")
            else:
                messages.error(
                    request,
                    "Seuls les fichiers .ZIP sont acceptés",
                )
                return redirect("categoryList")
        except IntegrityError:
            print("erreuuuuuuuur")
            messages.error(
                request,
                "Une erreur s'est produite. Veuillez réessayer plutard, ou contacter notre équipe technique.",
            )

    context = {
        "page_title": "Créer une catégorie",
        "modulelist": Module.objects.all(),
    }
    return render(request, "main/category/add_category.html", context)

utils.py:

def publish_doc(catg_name, zip):
    # create folder in machine
    # path = os.path.join(settings.STATIC_ROOT, catg_name)
    path = f"{settings.STATIC_ROOT}/{catg_name}"
    
    try:
        os.mkdir(path)
    except OSError as error:
        print(error)

    print("Directory '% s' created" % path)

    # check if contents have an index html file
    zipObj = ZipFile(zip, "r")
    if "index.html" in zipObj.namelist():
        zipObj.extractall(path)
        # return root path
        return path
    else:
        return "No index file found"

settings.py:

X_FRAME_OPTIONS = 'SAMEORIGIN'
STATIC_URL = "/static/"
STATIC_ROOT = "/documenter/site/public/static"
STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),)

html-код:

<iframe id="serviceFrameSend" src="/static/{{ catg.root }}" width="100%" height="1000" class="p-2" frameborder="0">

Когда я посещаю страницу, она выдает ошибку 500 (см. скриншот).enter image description here

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