Шаблон 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>