2

Мне нужна ваша помощь в отображении отображаемого html на моей странице webapp2 с данными, взятыми из текстового объекта ndb. В моем примере я вставилКак правильно отображать html-данные из файла ndb.TextProperty на странице webapp2

<b>foo</b> 

Я пошел к зрителю датастора Дева сервера и подтвердил значение выше того, что хранится. Однако, когда я загружаю страницу в Chrome, она отображается как то, что я вставлял в TextProperty, а не в рендерную версию. Я просмотрел источник из Chrome и обнаружил, что мне доставлен этот код:

&lt;b&gt;foo&lt;/b&gt; 

Как исправить ошибку?

Ниже приведены подробности.

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

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, которое я запросил. Однако, как-то я получаю теги, преобразованные следующим образом:

&lt;b&gt;foo&lt;/b&gt; 

Что мне здесь не хватает? Заранее спасибо!

+0

Это было легко исправить. На вид я добавил фильтр «| safe». Вместо {{body}} теперь он выглядит как {{body | safe}}. myview.HTML =========== Моей страница {{тело | безопасно}} Вот документация по безопасному фильтру HTTPS: //docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#safe – user2609060

+1

Хорошо, что вы нашли решение. Возможно, вы можете ответить на свой вопрос и утвердить ответ, чтобы он не отображался в категории без ответа. – dlebech

+0

Возможный дубликат [webapp2 изменяет теги html в чистом тексте] (http://stackoverflow.com/questions/16374332/webapp2-changes-html-tags-in-pure-text) –

ответ

1

Это было простое исправление.

На вид я добавил фильтр «| safe». Вместо {{body}} теперь он выглядит как {{body | safe}}.

myview.html 
=========== 
<html> 
<head> 
    <title>My Page</title> 
</head> 
<body> 
    {{ body|safe }} 
</body> 
</html> 

Вот документация на безопасном фильтр https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#safe