-->

错误的Django模板标签库中导入外部库(Error importing external libr

2019-09-20 23:20发布

所以,我试图写一个Django可重复使用的应用程序,为您的网页上显示您的Twitter的饲料的方法。 我清楚地知道它已经存在了20倍。 这是一个学术活动。 :)

目录结构非常简单:

myproject
|__  __init__.py
|__  manage.py
|__  settings.py
|__  myapp
     |__  __init__.py
     |__  admin.py
     |__  conf
          |__  __init__.py
          |__  appsettings.py
     |__  feedparser.py
     |__  models.py
     |__  templates
          |__  __init__.py
     |__  templatetags
          |__  __init__.py
          |__  twitterfeed.py
     |__  views.py
|__  templates
          |__  base.html
|__  urls.py

当运行Django的外壳,功能twitterfeed.py工作定义完美。 我也相信,我有模板标签正确命名和注册。

正如你所看到的,我用的是优良的通用饲料分析器 。 我的问题不是内超微颗粒本身,而是在超微颗粒的无能而导入模板标签库中调用。 当我{% load twitterfeed %}在base.py,我得到以下错误:

“通过twitterfeed”不是一个有效的标记库:无法从django.templatetags.twitterfeed加载模板库,无模块命名feedparser

我导入feedparser使用下面的语句:

import re, datetime, time, myapp.feedparser

我可以告诉大家最好的,此错误消息是稍微欺骗。 我觉得有一个ImportError去当模板库装上,这是它的Django的解释。

有什么办法,我可以重复使用我的应用程序中导入feedparser.py而不需要应用的用户某个地方feedparser在他们的PYTHONPATH?

谢谢!

Answer 1:

这看起来像那些烦人的相对路径的问题之一 - 在Python 2.6解决和更高的(在这里你可以做进口..feedparser等),但对旧版本往往有点棘手。 解决这个问题的一种廉价和欢快的方式可能只是移动feedparser.py到您的templatetags目录,作为同级twitterfeed.py



Answer 2:

我解决这类问题在下面的方法(即是我的整个项目的依赖航运库)。 首先,我创建在我的项目的根目录中的“外部”目录(在你的情况,这将是myproject/ext )。 然后,我把相关性,如在ext目录feedparser - myproject/ext/feedparser

最后,我改变我的manage.py脚本在sys.path之前插入EXT /目录。 这意味着既./manage.py runserver./manage.py shell会拿起正确的路径:

# manage.py
import os, sys
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'ext'))
# ... rest of manage.py

我觉得这个作品真的很好,如果你不喜欢的东西要virtualenvs周围的混乱。 当你部署你的项目,你必须确保路径是正确的,以及-我通常通过添加相同的解决这个sys.path.insert行我的mod_wsgi app.wsgi文件的开始。



文章来源: Error importing external library within Django template tag library