Usando a biblioteca Python-Markdown
Por Ricardo Costa Val do Rosário
1. O que é Python-Markdown?
• Python-Markdown é uma implementação em Python da linguagem de marcação Markdown criada por John Gruber.
• Ela converte texto escrito em sintaxe Markdown para HTML, permitindo gerar conteúdo web de forma simples e legível dentro de aplicações Python.
2. Instalação
Para instalar o pacote, use o pip:
pip install markdown
• Isso obtém a última versão estável disponível no PyPI (no momento, 3.8.2) e suas extensões padrão.
3. Conversão Básica de Markdown para HTML
O uso mais simples envolve importar o módulo markdown e chamar markdown.markdown() sobre uma string:
import markdown
md_text = "# Título de Exemplo\nEste é um parágrafo *em itálico* e **negrito**."
html = markdown.markdown(md_text)
print(html)
Saída resultante:
<h1>Título de Exemplo</h1>
<p>Este é um parágrafo <em>em itálico</em> e <strong>negrito</strong>.</p>
• Esse fluxo direto destaca a conversão do Markdown puro para HTML sem configurações adicionais.
4. Adicionando Extensões
Python-Markdown suporta diversas extensões que ampliam sua funcionalidade. Basta passar uma lista de nomes ao chamar markdown.markdown():
• extra: adiciona suporte a tabelas, listas de tarefas etc.
• codehilite: realce de sintaxe em blocos de código.
• toc: gera tabela de conteúdos baseada nos cabeçalhos. Exemplo com extensão extra:
import markdown
text = """
## Tarefas
- [x] Escrever relatório
- [ ] Revisar código
"""
html = markdown.markdown(text, extensions=['extra'])
print(html)
• Isso converte a lista de tarefas em caixas de seleção HTML desabilitadas e marcadas conforme o status do item.
5. Processando Arquivos Markdown
Para converter um arquivo .md em HTML:
import markdown
# Lê o arquivo Markdown
with open('entrada.md', 'r', encoding='utf-8') as f:
md_content = f.read()
# Converte para HTML
html = markdown.markdown(md_content, extensions=['extra', 'codehilite'])
# Salva o resultado
with open('saida.html', 'w', encoding='utf-8') as f:
f.write(html)
• Esse padrão de leitura, conversão e escrita é útil para gerar documentação estática ou páginas de blog automaticamente.
6. Personalizando o Processo de Conversão
Você pode ajustar parâmetros como formato de saída ou modo de segurança:
• output_format: define saída como 'xhtml1' ou 'html5'.
• safe_mode: com valor 'escape', escapa HTML potencialmente perigoso.
html = markdown.markdown(
md_text,
output_format='xhtml1',
extensions=['extra'],
safe_mode='escape'
)
• Isso ajuda a impedir que conteúdo malicioso seja injetado na página final, especialmente em aplicações que aceitam entrada dos usuários.
7. Integração em Aplicações Web
Em frameworks como Flask, você pode criar uma rota que receba
Markdown e retorne HTML dinâmico:
from flask import Flask, request, render_template_string
import markdown
app = Flask(__name__)
@app.route('/render', methods=['POST'])
def render_markdown():
md_text = request.form['markdown']
html = markdown.markdown(md_text, extensions=['codehilite', 'toc'])
template = f"<html><body>{html}</body></html>"
return render_template_string(template)
if __name__ == '__main__':
app.run(debug=True)
• Isso permite integrar rapidamente editores ou blogs internos sem sair do ecossistema Python.
8. Boas Práticas e Desempenho
• Validação de Entrada: limite o tamanho do texto e filtre padrões perigosos (ex.: