Django Рендеринг HTML в шаблоне дает байтов - PullRequest
0 голосов
/ 30 октября 2018

В моем приложении 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

Затем включаем рендеринг HTML в шаблон, используя тег safe:

 {{ 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')

1 Ответ

0 голосов
/ 18 ноября 2018

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 }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...