Расширение Python Markdown nl2br

Я начинающий программист и пытаюсь использовать библиотеку уценки python в своем веб-приложении. все работает нормально, кроме расширения nl2br.

когда я пытаюсь преобразовать текстовый файл в html с помощью md.convert(text), он не видит преобразования новых строк в <br>.

например, до того, как я конвертирую, текст:

Puerto Rico

===========

------------------------------

### Game Rules





hello world!

после конвертации получаю:

 <h1>Puerto Rico</h1>
<hr />
<h3>Game Rules</h3>
<p>hello world!</p>

Насколько я понимаю, пробелы представлены как «\ n» и должны быть преобразованы в <br>, но я не получаю такого результата. Вот мой код:

import markdown
md = markdown.Markdown(safe_mode='escape',extensions=['nl2br']) 
html = md.convert(text)

Пожалуйста, дайте мне знать, если у вас есть какие-либо идеи или вы можете указать мне в правильном направлении. Спасибо.


person Jamie B    schedule 30.08.2012    source источник
comment
По сути, я получаю тот же ответ / вывод, что и этот онлайн-редактор mardown. Он не включает разрывы строк в выводе. hashify.me   -  person Jamie B    schedule 30.08.2012


Ответы (2)


Попробуйте добавить два или более пробела в конце строки, чтобы вставить теги <br/>.

Пример:

hello  
world

приводит к

<p>hello <br>
world</p>

Обратите внимание, что после слова привет есть два пробела. Это работает, только если у вас есть текст перед двумя пробелами в конце строки. Но это не имеет ничего общего с вашим расширением nl2br, это стандарт уценки.

Мой совет: если вам явно не нужно делать это преобразование, просто не делайте этого. Использование псевдонимов <p>-тегов для абзацев — это более чистый способ разделения текстовых областей.

Если вы просто хотите иметь больше места после заголовков <h3>, тогда определите для него CSS:

h3 { margin-bottom: 4em; }

Представьте, если вы делаете интервалы с тегами <br> после заголовков на всех ваших 500 страницах вики, а позже вы решите, что это 20 пикселей слишком много места. Затем вам нужно отредактировать все свои страницы вручную и удалить два тега <br> на каждой странице. В противном случае вы просто редактируете одну строку в файле css.

person apparat    schedule 30.08.2012
comment
Спасибо за предложение. Я пробовал это, но это дает мне тот же вывод html. - person Jamie B; 30.08.2012
comment
Обновил мой ответ с примером - person apparat; 30.08.2012
comment
Ценю, что вы изучаете это. А пока я воспользуюсь вашим советом и изменю с помощью css. У меня слишком сильно кружится голова от попыток разобраться с расширением nl2br. :( - person Jamie B; 30.08.2012

Сам нашел этот вопрос в поисках разъяснений. Следовательно, добавление обновления, несмотря на опоздание на 7 лет.


Справочная ветка по проекту Python Markdown: https://github.com/Python-Markdown/markdown/issues/707

Оказывается, это действительно ожидаемое поведение, и, следовательно, расширение nl2br преобразует только одиночные символы новой строки, встречающиеся внутри блока, а не вокруг него. Что значит,

This is
a block

This is a different
block

превращается в

<p>This is<br/>block</p>\n<p>This is a different<br/>block</p>

но когда у вас есть отдельные блоки,

Puerto Rico

===========

------------------------------

### Game Rules





hello world!

все окружающие новые строки свернуты, и теги <br/> не вводятся.

<h1>Puerto Rico</h1>
<hr />
<h3>Game Rules</h3>
<p>hello world!</p>
person pratu16x7    schedule 12.05.2019