【问题标题】:Django: Dynamic "table of contents" based on HTML tagsDjango:基于 HTML 标签的动态“目录”
【发布时间】:2016-12-23 03:54:14
【问题描述】:

我有一个带有TextField 的模型,用户可以使用 HTML 填充它。现在我希望 Django 呈现一个动态的“目录”,这样当使用 <h> 标记时,django 会自动将其添加到列表中。如果嵌套列表也是可能的,则加分。

我曾考虑过使用包含标签,但我不确定具体的细节。任何帮助将非常感激。

【问题讨论】:

  • 发布你到目前为止所尝试的内容
  • @luke_aus 老实说,我没有真正的线索。现在,Textfield 正在显示 DetailView 和一个小模板。同样,我对包含标签进行了一些研究。我猜问题是在字典中获取所有<h> 标签?也许一些正则表达式?或者也许有更好的解决方案? (我对 Django 还是很陌生,所以请多多包涵……)
  • 您是否希望用户能够做到所见即所得,例如tinymce/ckeditor?
  • @luke_aus 是的,这也是我希望在未来实现的东西。这与我最初的问题有关吗?

标签: python django python-3.x


【解决方案1】:

我从来没有完全这样做过......但这是我开始的方式。

获取 HTML

首先要做的事情是让用户添加 HTML。可能安装 tinyMCE,使用 tinyMCE 的 HTML 字段。用户可以使用 tinyMCE 的 WYSIWUG 复制和粘贴 HTML 或添加 HTML 内容。

生成一个 DOM 对象

你可能会想——我会写一些正则表达式来找到相关的 h1-6 标签。问题是parsing html with regex is a nightmare 不应该与regex 一起完成。

接下来您可能需要render the html。可能有quite a few ways 可以做到这一点。

目录

然后浏览渲染的 html 并拉出所有 h1-6 标签或任何你想要的。

您可能想要编辑 html 并将 TOC 添加到列表顶部 - 或者将其保存为单独的 html sn-p,您可以在呈现它时将其插入到主 html 文档中。

如果生成 TOC 听起来工作量太大……可能是这样。我相信您可以找到自动提取 h1 标头并链接到内容的解决方案。这是一个jquery plugin 就是这样做的。可以在这里进行一些谷歌搜索,以便找到生成 TOC 的最简单方法 - 似乎这是很常见的事情。

其他想法

  • 请注意 - 由于安全隐患,您需要确保在呈现页面时不解析 javascript!
  • 用于修改 html 以将目录超链接到实际标题的奖励标记。
  • 确保在用户修改 HTML 内容时重新生成 TOC

祝你好运。

【讨论】:

    猜你喜欢
    • 2021-05-10
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 2014-07-29
    相关资源
    最近更新 更多