Отображение файла .html в iFrame, загруженного как медиафайл, с помощью Django

Я хочу отобразить загруженный .html файл в iFrame на моем шаблоне. Я бы не хотел устанавливать его как url для посещения в файле urls.py, я загружаю .html файлы из панели администратора в папку media следующим образом:

модель

# Portfolio project overview model
class Work(models.Model):
    html = models.FileField(upload_to="work_app/media/htmls/", null=True, blank=True)

settings.py

MEDIA_ROOT = str(BASE_DIR) + "/media/"
MEDIA_URL = '/media/'
STATIC_ROOT = str(BASE_DIR) + "/static/"
STATIC_URL = '/static/'

Моя первая попытка отобразить его, используя этот template.html код:

{% extends "base.html" %}
{% load static %}

{% block page_content %}
<h1>{{ work.title }}</h1>
<div class="row">
    <div class="col-md-8">

        {% if work.html %}
            <iframe height="100%" width="100%" src="{{ 'work.html.url' }}"> 
            </iframe>
        {% endif %}
    </div>
</div>
{% endblock %}

... выглядит следующим образом:

firstAttempt

Как видите, iFrame отображается, но похоже, что он не может найти .html файл (404).

Я видел в нескольких других сообщениях, что строка html должна быть:

<iframe height="100%" width="100%" src="{% url 'work.html' %}"> </iframe>

... и также добавить X_FRAME_OPTIONS = 'SAMEORIGIN' в ваш файл settings.py, так что я сделал оба эти действия, где я теперь получаю:

secondAttempt

Что это пытается мне сказать? Что я упускаю?

UPDATE. Я также пробовал:

<iframe height="100%" width="100%" src="{{ work.html }}"> </iframe>

на что я получаю еще один 404:

thirdAttempt

Я забираю свои слова обратно, мне пришлось очистить кэш или запустить страницу в режиме инкогнито, так как ни одно из моих изменений не отражалось на странице из-за кэша. Как только я это сделал, iframe стал отображаться правильно.

Другой вариант, который я рассматривал, заключался в установке декоратора xframe exemption в представление, которое обрабатывает рендеринг страницы подробностей поста, что выглядело бы примерно так:

from django.shortcuts import render
from django.views.decorators.clickjacking import xframe_options_exempt

# Create your views here.
from .models import Work

@xframe_options_exempt
def work_detail(request, pk):
    work = Work.objects.get(pk=pk)
    context = {
        'work': work
    }
    return render(request, 'work_detail.html', context)

что тоже вроде бы сработало, но я возвращаюсь к методу SAMEORIGIN

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