在我的django应用程序中,我手动呈现页面并将其提供给模板以包括:
def get_context_data(self, **kwargs):
page = render(self.request, test_absolute_path, context, content_type=None, status=None, using=None)
soup = BeautifulSoup(page.content, 'html.parser')
soup.dosomestuff()
page.content = str(soup.decode()).replace('\n','')
context['subtests'].append(page)
return context
然后使用safe
标签将渲染的HTML包含在模板中:
{{ page.content | safe }}
我确实包含了标签,但是文本看起来像字节数组,并且由于某些原因编码不正确:
b'
My text Cat\xc3\xa9gorisation S\xc3\xa9quqsdazeences R\xc3\xa9ponses associ\xc3\xa9es Fluidit\xc3\xa9
请注意,我还必须用代码中的所有内容替换所有\n
。
编辑:
我注意到以ascii编码汤至少可以打印所有字符,尽管如此我仍然无法摆脱\n
或b
:
page.content = soup.encode('ascii')
答案 0 :(得分:1)
page.content
始终返回字节数组。一种选择是在模板标签中调用解码。
{{ page.content.decode | safe }}
另一种是使用如下不同的名称。
def get_context_data(self, **kwargs):
page = render(self.request, 'viewbase/sub_page.html', context,
content_type=None, status=None, using=None)
soup = BeautifulSoup(page.content, 'html.parser')
soup.dosomestuff()
page.new_content = soup.decode()
context['subtests'].append(page)
return context
有了这个,模板就具有下面的标签。
{{ page.new_content | safe }}
或者直接将内容而不是页面放在上下文中,以防页面中不需要其他任何内容。
context['subtests'].append(soup)
{{ soup | safe }}