Шаблон Django: атрибут src не работает

Я немного потренировался с Django и в последнее время столкнулся с проблемой, которую никак не могу решить.

Я дам вам немного контекста.

У меня есть такая модель (я думаю, вы можете просто сосредоточиться на том, что у модели есть функция gitUrl):

class AllTemplates(models.Model):
    categories = [
        ('landing-page', 'landing-page')
    ]
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=100)
    image = models.ImageField(null=True, blank=True)
    category = models.CharField(
        max_length=200, choices=categories, default='landing-page')
    url = models.CharField(max_length=500, null=True)

    def __str__(self):
        return self.name

    @property
    def templateNumber(self):
        try:
            number = self.id
        except:
            number = ''
        return number

    @property
    def templateTitle(self):
        try:
            title = self.name
        except:
            title = ''
        return title

    @property
    def imageURL(self):
        try:
            url = self.image.url
        except:
            url = ''
        return url

    @property
    def gitUrl(self):
        try:
            gitPath = self.url
        except:
            gitPath = ''
        return gitPath

Цель этой модели - хранить все шаблоны, которые я разрабатываю, в базе данных. Каждый шаблон имеет различные поля, включая 'url', в котором я храню url github, где находится данный шаблон.

Что я не могу сделать, так это: динамически заставить каждый шаблон иметь html-файл, в котором есть тег iframe, атрибут src которого указывает на url github

Вот что я пытался сделать.

Мой urls.py (строка, которая интересует в данном случае, содержит динамический url, последняя):

from django.urls import path
from . import views

app_name = 'websiteEcomm'
urlpatterns = [
    path('', views.home, name='home'),
    path('landing-page/', views.landingPage, name='landing-page'),
    path('preview/<str:siteTitle>/', views.preview, name='preview'),
]

Мой views.py (функция, которая интересует в данном случае, называется 'preview', т.е. последняя):

from django.shortcuts import render
from .models import *

# Create your views here.
allTemplates = AllTemplates.objects.all()
landingPage = AllTemplates.objects.filter(category='landing-page')

context = {'allTemplates': allTemplates, 'landingPage': landingPage}


def home(request):
    return render(request, 'websiteEcomm/home.html', context)


def landingPage(request):
    return render(request, 'websiteEcomm/landingPage.html', context)


def preview(request, siteTitle):
    siteTitle = AllTemplates.objects.get(name=siteTitle)
    website = AllTemplates.objects.all()

    previewContext = {'siteTitle': siteTitle, 'website': website}
    return render(request, 'websiteEcomm/preview-templates/base.html', previewContext)

На этом этапе я создал html-файл под названием 'base.html', в который вставил тег 'iframe'. Содержимое 'base.html' выглядит следующим образом:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title> {{siteTitle}} - Free Attitude Template</title>
</head>

<body>
    
    <iframe src="{{website.gitUrl}}" frameborder="0"></iframe>
</body>

</html>

Все работает, кроме атрибута src тега 'iframe', который пуст. Вот структура 'base.html' при просмотре в браузере:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title> Medicio - Free Attitude Template</title>
</head>

<body>
    
    <iframe src="" frameborder="0"></iframe>
</body>

</html>

Думаю, вам нужно исправить src="{{siteTitle.gitUrl}}" вместо src="{{website.gitUrl}}" вот так...

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title> {{siteTitle}} - Free Attitude Template</title>
    </head>
    
    <body>
        
        <iframe src="{{siteTitle.gitUrl}}" frameborder="0"></iframe>
    </body>
    
    </html>
Вернуться на верх