一、环境预备与基础用法
1.1 安装markdown库
1.2 基础转换示例
- import markdown
- md_content = """
- # Hello World
- **Python** Markdown转换演示:
- - 列表项1
- - 列表项2
- """
- html_content = markdown.markdown(md_content)
- print(html_content)
复制代码 输出效果:
- <h1>Hello World</h1>
- <p><strong>Python</strong> Markdown转换演示:</p>
- <ul>
- <li>列表项1</li>
- <li>列表项2</li>
- </ul>
复制代码 二、文件级转换实践
2.1 文件读写转换
- def convert_md_to_html(input_file, output_file):
- with open(input_file, 'r', encoding='utf-8') as f:
- md_text = f.read()
-
- html_text = markdown.markdown(md_text)
-
- with open(output_file, 'w', encoding='utf-8') as f:
- f.write(f"<!DOCTYPE html>\n<html>\n<body>\n{html_text}\n</body>\n</html>")
- # 使用示例
- convert_md_to_html('document.md', 'output.html')
复制代码 三、扩展功能深度应用
3.1 常用扩展模块
- extensions = [
- 'tables', # 表格支持
- 'fenced_code', # 代码块
- 'nl2br', # 换行转换
- 'sane_lists' # 智能列表
- ]
- html = markdown.markdown(md_text, extensions=extensions)
复制代码 3.2 代码高亮扩展
- html = markdown.markdown(md_text,
- extensions=['codehilite'],
- extension_configs={
- 'codehilite': {
- 'linenums': True,
- 'css_class': 'highlight'
- }
- })
复制代码 需配合Pygments利用:
四、安全防护与输出处理惩罚
4.1 安全模式
- # 过滤潜在危险标签
- safe_html = markdown.markdown(raw_input, safe_mode=True)
复制代码 4.2 白名单过滤
- from markdown import Extension
- from markdown.treeprocessors import Treeprocessor
- class SafetyFilter(Treeprocessor):
- def run(self, root):
- for el in root.iter():
- if el.tag not in ['h1', 'p', 'ul', 'li']:
- el.drop_tag()
- class SafetyExtension(Extension):
- def extendMarkdown(self, md):
- md.treeprocessors.register(SafetyFilter(), 'safety_filter', 0)
- html = markdown.markdown(text, extensions=[SafetyExtension()])
复制代码 五、样式定制与模板集成
5.1 添加CSS样式表
- def wrap_with_style(html_content):
- return f"""<!DOCTYPE html>
- <html>
- <head>
- <style>
- body {{ max-width: 800px; margin: 20px auto }}
- code {{ background: #f5f5f5; padding: 2px 4px }}
- </style>
- </head>
- <body>
- {html_content}
- </body>
- </html>"""
复制代码 5.2 结合Jinja2模板
- from jinja2 import Template
- template = Template("""
- <!DOCTYPE html>
- <html>
- <head>
- <title>{{ title }}</title>
- {% include 'styles.css' %}
- </head>
- <body>
- {{ content|safe }}
- </body>
- </html>
- """)
- rendered = template.render(title="Converted Document", content=html_content)
复制代码 六、实用案例:完整转换脚本
- import markdown
- import argparse
- def main():
- parser = argparse.ArgumentParser()
- parser.add_argument('input', help='Input .md file')
- parser.add_argument('-o', '--output', help='Output .html file')
- args = parser.parse_args()
- with open(args.input, 'r') as f:
- converted = markdown.markdown(f.read(),
- extensions=['tables', 'fenced_code'],
- output_format='html5')
-
- output_file = args.output or args.input.replace('.md', '.html')
- with open(output_file, 'w') as f:
- f.write(f"""<!DOCTYPE html>
- <html>
- <head><meta charset="UTF-8"></head>
- <body>
- {converted}
- </body>
- </html>""")
- if __name__ == "__main__":
- main()
复制代码 利用方式:
- python converter.py input.md -o output.html
复制代码 常见问题排查
- 编码问题:
- open(file, 'r', encoding='utf-8')
复制代码
- 扩展加载失败:
- 确认扩展名称拼写准确
- 检查是否必要额外依靠(如codehilite必要Pygments)
- 样式不生效:
- 检查CSS路径是否准确
- 验证HTML布局完整性
- 利用浏览器开发者工具调试样式
通过本指南,您可掌握从基础转换到安全防护、样式定制的完整工作流。发起根据现实需求组合不同的扩展模块,并通过模板引擎实现更复杂的文档天生需求。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |