打破了我的Django应用程序 - 路径问题?

时间:2010-02-03 11:44:35

标签: django

症状:

  

无法导入tinycomm.views。错误是:没有名为models的模块

代码行:

 from tinycomm.models import *

项目结构:

/tinycomms
  /tinycomm
    models.py
    views.py
    etc.
  /other apps.

在开发中的Mac OS X我可以通过put tinycomms.tinycomm.models解决这个问题,然后在其他地方弹出另一个类似的错误。我通过在应用程序中更改大约10条模型和表单的路径来开发工作(更多的路径仍然像tinycomm.module一样),每次它都会改变路径。

我上传到Ubuntu生产服务器并遇到了同样的问题,只有全名无法解决问题。

这个应用程序已经运行好几个月,我能想到的唯一重大变化是在Mac OS X上安装Aptana Jaxer,但由于生产中也存在问题,我不确定是什么问题

其他一些重大变化是将应用程序文件夹名称从“web”更改为“tinycomm”,但是在开发过程中有完整的路径修复,它正在运行,所以我不确定是否也是原因。

以下列出了我尝试的内容:

  1. 它说的所有文件都无法找到它们应该是
  2. init .py到处应该
  3. 到处添加的路径/ home / project_dir,/ home / project_dir / tinycomms,/ home / project_dir / tinycomms / tinycomm
  4. 尝试删除所有这些路径
  5. 尝试逐个取出所有应用 - 它抱怨的模块发生了变化,但基本的No module named x保持不变。
  6. 删除了所有中间件等。
  7. 升级到Django 1.2
  8. 以下是完整输出:

    Environment:
    
        Request Method: GET
        Request URL: http://127.0.0.1:8004/
        Django Version: 1.2 alpha 1
        Python Version: 2.5.2
        Installed Applications:
        ['django.contrib.auth',
         'django.contrib.contenttypes',
         'django.contrib.sessions',
         'django.contrib.sites',
         'django.contrib.admin',
         'tinycomms_tagging',
         'tinycomm']
        Installed Middleware:
        ('django.middleware.common.CommonMiddleware',
         'django.contrib.sessions.middleware.SessionMiddleware',
         'django.contrib.auth.middleware.AuthenticationMiddleware',
         'django_authopenid.middleware.OpenIDMiddleware')
    
    
    Traceback:
        File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/core/handlers/base.py" in get_response
          90.                         request.path_info)
        File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/core/urlresolvers.py" in resolve
          222.                     sub_match = pattern.resolve(new_path)
        File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/core/urlresolvers.py" in resolve
          129.             return self.callback, args, kwargs
        File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/core/urlresolvers.py" in _get_callback
          138.             raise ViewDoesNotExist, "Could not import %s. Error was: %s" % (mod_name, str(e))
    
    Exception Type: ViewDoesNotExist at /
    Exception Value: Could not import tinycomm.views. Error was: No module named models
    

    任何有关下一步尝试的建议都会感激不尽!

    tinycomm / init的内容 .py:

    from django.utils.translation import ugettext as _
    
    from tinycomms_tagging.managers import ModelTaggedItemManager, TagDescriptor
    
    VERSION = (0, 3, 'pre')
    
    class AlreadyRegistered(Exception):
        """
        An attempt was made to register a model more than once.
        """
        pass
    
    registry = []
    
    def register(model, tag_descriptor_attr='tags',
                 tagged_item_manager_attr='tagged'):
        """
        Sets the given model class up for working with tags.
        """
        if model in registry:
            raise AlreadyRegistered(
                _('The model %s has already been registered.') % model.__name__)
        registry.append(model)
    
        # Add tag descriptor
        setattr(model, tag_descriptor_attr, TagDescriptor())
    
        # Add custom manager
        ModelTaggedItemManager().contribute_to_class(model,
                                                     tagged_item_manager_attr)
    

2 个答案:

答案 0 :(得分:1)

检查您的代码,看看您从tinycomms开始导入的某个地方。*(注意“s”)而不是tinycomm。*。有时,当您将相对导入与绝对导入混合时,会出现类似的奇怪错误。

答案 1 :(得分:1)

确保您没有在tinycomm.views.*中导入tinycomm.models,循环依赖,例如抛出这些错误。

顺便说一下,你的tinycomm/__init__.py中有什么东西吗?

修改

追溯表明它可能来自您的utls.py或其中一个include()。您可以尝试评论一些网址模式,看看会发生什么。

如果这没有帮助,这里有一个简单的方法来搜寻循环导入(非显而易见的导入)和类似的导入问题,可能会对你有所帮助:

当您找到导致导入错误的文件时,请尝试删除(注释掉)该文件中的所有import语句:您应该最终得到一堆NameErrors。然后,开始逐个添加导入,当您获得ImportError而不是NameError时,只需按照导入并使用导入的文件执行此操作。希望这会有所帮助。