0

我一直在努力解决这个问题,但似乎无法弄清楚。我有一个带有一组自定义模板标签的应用程序:

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 小时后才能添加。

4

2 回答 2

1

您的crowd应用程序本身可能不在您的 Pythonpath 上。要么添加它,要么从项目中导入:from myproject.crowd.models import Foo, Bar.

于 2012-05-30T15:48:44.110 回答
1

我花了一段时间才发现 shell 命令提供了比 django 更有用的消息,这导致了这一点:

事实证明它甚至与 project_tags 没有直接关系,它只是不是一个非常有用的错误消息。project_tags.py 中的导入:

 from crowd.forms import SearchForm

正在打电话:

from crowdfunder.models import Payment, Project, RewardLevel, ProjectUpdate, GalleryPhoto

在 forms.py 中,应该是:

from models import Payment, Project, RewardLevel, ProjectUpdate, GalleryPhoto
于 2012-05-31T16:37:56.253 回答