Мне нужна ваша помощь в отображении отображаемого html на моей странице webapp2 с данными, взятыми из текстового объекта ndb. В моем примере я вставилКак правильно отображать html-данные из файла ndb.TextProperty на странице webapp2
<b>foo</b>
Я пошел к зрителю датастора Дева сервера и подтвердил значение выше того, что хранится. Однако, когда я загружаю страницу в Chrome, она отображается как то, что я вставлял в TextProperty, а не в рендерную версию. Я просмотрел источник из Chrome и обнаружил, что мне доставлен этот код:
<b>foo</b>
Как исправить ошибку?
Ниже приведены подробности.
Моя модель выглядит следующим образом:
Models.py
=========
from google.appengine.ext import ndb
class MyPosts(ndb.Model):
slug = ndb.StringProperty(indexed=True)
content = ndb.TextProperty(indexed=False)
Я могу вставить в моей модели кучу HTML кода (только то, что будет в теге тела).
Вот мой контроллер. Запрос работает нормально, когда я возвращаю запись. Кроме того, пути не являются проблемой, поскольку страница загружается успешно.
Controller.py
=============
import os
from google.appengine.ext.webapp import template
import webapp2
from Models import MyPosts
class ViewMyPost(webapp2.RequestHandler):
def get(self,title):
ds = MyPosts.query(MyPosts.slug == title).fetch(1)
content = str(ds[0].content)
template_values = {
'body': content,
}
path = os.path.join(os.path.dirname(__file__), 'views/myview.html')
self.response.out.write(template.render(path, template_values))
Это мой взгляд. Значение {{body}} предоставляется моим контроллером.
myview.html
===========
<html>
<head>
<title>My Page</title>
</head>
<body>
{{ body }}
</body>
</html>
вставленные данные: создать короткую программу, которая вставляет запись со следующим значением для моего TextProperty
<b>foo</b>
Ожидаемый результат: Я ожидаю страницу для отображения Foo, которая является прямой подстановкой {{body}} значением поля TextProperty.
Фактический результат: Подстановка возвращает все значение TextProperty, которое я запросил. Однако, как-то я получаю теги, преобразованные следующим образом:
<b>foo</b>
Что мне здесь не хватает? Заранее спасибо!
Это было легко исправить. На вид я добавил фильтр «| safe». Вместо {{body}} теперь он выглядит как {{body | safe}}. myview.HTML ===========
Хорошо, что вы нашли решение. Возможно, вы можете ответить на свой вопрос и утвердить ответ, чтобы он не отображался в категории без ответа. – dlebech
Возможный дубликат [webapp2 изменяет теги html в чистом тексте] (http://stackoverflow.com/questions/16374332/webapp2-changes-html-tags-in-pure-text) –