仅限生产时自定义模板标签的受限属性

时间:2012-08-02 08:49:03

标签: python django web-applications beautifulsoup webfaction

我正在使用此模板标签:

@register.filter
def php_striptags(text, allowed=""):
    soup = BeautifulSoup(text)

    # list all tags
    allowed_tags = allowed.split()

    for tag in soup.find_all(True):
        if tag.name not in allowed_tags:
            tag.unwrap()

    return soup.encode_contents().decode('utf8')

它在开发机器上工作正常,但我在生产中遇到这个错误:

Exception Type:     RuntimeError
Exception Value:    restricted attribute
Exception Location:     /usr/local/lib/python2.7/inspect.py in getargspec, line 813

我在webfaction上托管我的网站,使用apache和mod_wsgi运行。可能有什么不对?

2 个答案:

答案 0 :(得分:4)

终于找到了真正的问题,实际上是在BeautifulSoup doc中记录的: http://www.crummy.com/software/BeautifulSoup/bs4/doc/#other-parser-problems

  

如果您的脚本在一台计算机上运行而在另一台计算机上运行,​​则可能是因为这两台计算机具有不同的可用解析器库。例如,您可能已在安装了lxml的计算机上开发了该脚本,然后尝试在仅安装了html5lib的计算机上运行该脚本。请参阅解析器之间的差异,了解其重要性,并通过在BeautifulSoup构造函数中提及特定的解析器库来解决问题。

为了制作汤,请尝试以下方法:

soup = BeautifulSoup(text, "html.parser")

答案 1 :(得分:0)

我相信你没有将BeautifulSoup安装到你的系统Python库中,而是你已经下载了BeautifulSoup,并把它放在你的自定义PYTHONPATH中。这使得您的BeautifulSoup副本被视为外部Python代码,Python以受限模式运行它(请参阅Restricted Execution

只需通过pip / easy_install安装BeautifulSoup,或为其安装操作系统包,此错误就会消失。