我一直在努力解决这个问题,但似乎无法弄清楚。我有一个带有一组自定义模板标签的应用程序:
from django import template
from crowd.models import Payment, Project, ProjectCategory
register = template.Library()
@register.filter
def is_customer(user, project):
try:
return Payment.objects.filter(user=user, project=project).count() > 0
except:
return False
抛出:
'project_tags' is not a valid tag library: ImportError raised loading crowd.templatetags.project_tags: No module named models
应用程序树如下所示:
crowd/
-- __init__.py
-- models.py
templatetags/
-- __init__.py
-- project_tags.py
从模型和 crowd.models 导入都给了我同样的错误。
追溯:这里
更新
当我注意到它被破坏时,我正在做一些不相关的事情,所以我恢复到该项目的早期已知工作版本。仍然是同样的问题,所以我认为 Daniels 关于 PYTHONPATH 的回答是正确的,但是,我该如何修复呢?
>>> import sys
>>> sys.path
['/Users/****/Documents/dev/product/src/Product', ...]
__init__.py 一直都在那里,并且人群在 Product 中,所以它不应该在路上吗?
更新 2
我在shell中做了一些调查:
>>> from crowd.models import *
>>> from crowd.managers import *
>>> from crowd.constants import *
>>> from crowd.templatetags import *
>>> from crowd.templatetags import project_tags
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/Users/Murph/Documents/dev/product/src/Product/crowd/templatetags/project_tags.py", line 4, in <module>
from crowd.forms import SearchForm
File "/Users/Murph/Documents/dev/product/src/Product/crowd/forms.py", line 5, in <module>
from crowd.models import Payment, Project, ProjectUpdate, GalleryPhoto
ImportError: No module named models
>>>
仍然不知道为什么具体会失败,特别是因为一揽子导入有效。
更新 3
我花了一段时间才发现 shell 命令提供了比 django 更有用的消息,这导致了这一点:
事实证明它甚至与 project_tags 没有直接关系,它只是不是一个非常有用的错误消息。project_tags.py 中的导入:
from crowd.forms import SearchForm
正在打电话:
from crowd.models import Payment, Project, RewardLevel, ProjectUpdate, GalleryPhoto
在 forms.py 中,应该是:
from models import Payment, Project, RewardLevel, ProjectUpdate, GalleryPhoto
我会尽可能将其添加为答案,显然要等到 8 小时后才能添加。