【问题标题】:Django precise_bbcode not properly parsing contents of [code] tags?Django precision_bbcode 没有正确解析 [code] 标签的内容?
【发布时间】:2017-01-30 07:40:08
【问题描述】:

我刚刚在我的 Django 1.10.4 应用程序中安装了precision_bbcode 1.2.6。

当我提供字符串时:

>>> s = """
    [code]
    for i in var:
      print(var[i])
    [/code]
    """

输出只是纯文本:

对于 var 中的 i: 打印(变量[i])

但是,如果我将 [i] 更改为 [i2] 它可以正常工作并按预期格式化文本。

我猜测precision_bbcode 认为[i] 与斜体文本有关(即使它被[code] 标签包围并且[i] 没有关联的结束标签)。 [b] 和可能任何其他可识别的标签也存在此行为

然后我尝试设置选项render_embedded = False,但我仍然得到相同的行为。

然后我尝试制作自己的“代码”标签:

from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import HtmlFormatter

class PygmentsBBCodeTag(BBCodeTag):
    name = 'code'

    class Options:
        strip = False
        replace_links = False
        render_embedded = False
        transform_newlines = False
        escape_html = False

    def render(self, value, option=None, parent=None):
        print(value)
        return highlight(value, PythonLexer(), HtmlFormatter())

tag_pool.register_tag(PygmentsBBCodeTag)

得到了同样的结果。

更奇怪的是,在我的 PygmentsBBCodeTag 类中,每当 [i] 存在时,我注意到它从未被调用(因为未打印值)。

有没有什么方法可以告诉precision_bbcode 将[code] 标记之间的内容完全视为一个字符串,并忽略除了结束[/code] 标记之外的任何内容??

谢谢

【问题讨论】:

  • 您应该将其作为错误报告给开发人员。
  • 我看到作者是 Morgan Aubert - github.com/ellmetha 我应该联系他吗?还是有更好的地方?

标签: python django bbcode


【解决方案1】:

我想出了一个解决方案,只需要在bbcode/parser.py 中添加两行。

注意这适用于我的应用程序,并且基于我的测试 改变不会产生不必要的副作用。我不能保证 这是最好的解决方案,我鼓励您测试您的应用程序 完成此编辑后。但是,如果我确实发现任何不受欢迎的 以后的行为我会尝试在这里发布详细信息。


程序:

  1. 查找文件:.../dist-packages/precise_bbcode/bbcode/parser.py

  2. 打开文件并导航到:

    • 对于 django-precise-bbcode 1.2.6 找到 line #242
    • 对于 django-precise-bbcode 1.2.9 找到 line #248
  3. 然后修改内容:

    发件人:

    if previous_tag_options.end_tag_closes:
        opening_tags.pop()
    

    收件人:

    if not tag_options.render_embedded:
        opening_tags = []    
    elif previous_tag_options.end_tag_closes:
        opening_tags.pop()
    

这些是唯一需要的更改。

完成此操作后,对于render_embedded = False 的任何标签,当在封闭的文本中识别出类似于 bbcode 的标签时,它似乎不再中断。现在将整个字符串传递给语法高亮显示格式。

[更新]

将近一年后(升级到 1.2.9 版后),原来的问题仍然存在。但是我一直在使用本文中说明的过程,到目前为止它仍然运行良好!

【讨论】:

    猜你喜欢
    • 2013-08-29
    • 2011-04-29
    • 1970-01-01
    • 2014-02-28
    • 2023-03-04
    • 2016-07-18
    • 2015-01-27
    • 1970-01-01
    相关资源
    最近更新 更多