Вложенные теги шаблонизатора Django
models.py:
class HTMLPage(models.Model):
"""Контент страниц"""
url = models.TextField('URL страницы')
title = models.TextField('Заголовок страницы')
body = models.TextField('HTML-code')
js = models.TextField('JavaScript-code')
ctime = models.DateTimeField('Запись создана', default=timezone.now)
views.py:
class ShowPage(View):
"""Рендер страниц из БД"""
@staticmethod
def get(request, url: str = 'index.html'):
"""Получить страницу по URL"""
context = {'page': HTMLPage.objects.filter(url=url).first(),
'nowtime': datetime.now().strftime('%Y:%m:%d %H:%M')}
return render(request, 'index.html', context=context)
index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{ page.title | safe }}</title>
</head>
<body>
{% if page.body %}
{{ page.body | safe }}
{% else %}
<h1>NOT FOUND</h1>
{% endif %}
</body>
</html>
Создадим объект HTMLPage:
page = HTMLPage()
page.url='index.html'
page.title='test'
page.body='<b>{{ nowtime }}</b>' # НЕ РАБОТАЕТ
page.save()
Если запустить это веб-приложение, то пройдя по пути http://127.0.0.1:8000/index.html мы увидим не время, а <b>{{ nowtime }}</b>
Как это исправить?
P.S. Пример полностью можно клонировать с https://gitlab.com/svmitin/djangoproject/
Ответы (1 шт):
Автор решения: svmitin
→ Ссылка
Нужно отредактировать views.py:
from django.views.generic.base import View
from django.template import Template, Context
from .models import HTMLPage
class ShowPage(View):
"""Рендер страниц из БД"""
@staticmethod
def get(request, url: str = 'index.html'):
"""Получить страницу по URL"""
page = HTMLPage.objects.filter(url=url).first()
nowtime = datetime.now().strftime('%Y:%m:%d %H:%M')
template = Template(page.body)
context = Context(dict(nowtime=str(nowtime)))
body = template.render(context)
context = {'page': page,
'nowtime': nowtime,
'body': body}
return render(request, 'index.html', context=context)