代码之家  ›  专栏  ›  技术社区  ›  PhoebeB

坏了我的django应用程序-路径问题?

  •  0
  • PhoebeB  · 技术社区  · 16 年前

    症状:

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

    代码行:

     from tinycomm.models import *
    

    项目结构:

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

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

    我上传到一个Ubuntu生产服务器,遇到了同样的问题,只有全名不能解决这个问题。

    这个应用程序已经运行了几个月了,我能想到的唯一的主要变化是安装 Aptana Jaxer 在MacOSX上,但由于问题也存在于生产中,我不确定这是问题所在。

    另一个更大的改变是将应用程序文件夹名从“web”改为“tinycomm”,但随着开发中的完整路径修复,它开始工作,所以我也不确定这是什么原因。

    以下是我尝试过的事情:

    1. 它说找不到的所有文件肯定都应该在哪里
    2. 初始化 .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

    以下是完整输出:

    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的内容/ 初始化 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 回复  |  直到 16 年前
        1
  •  1
  •   Attila O.    16 年前

    确保不导入 tinycomm.views.* 在里面 tinycomm.models ,循环依赖项喜欢抛出这些类型的错误。

    顺便问一下,你有什么东西在里面吗? tinycomm/__init__.py ?

    编辑 以下内容:

    回溯表明它可能来自 utls.py 或者其中之一 include() 你可以尝试评论一些URL模式,看看会发生什么。

    如果这不起作用,下面是一个简单的方法来查找循环导入(不明显的导入)和类似的导入问题,这些问题可能会帮助您:

    当您发现哪个文件导致导入错误时,请尝试从该文件中删除(注释掉)所有导入语句:您应该以一堆名称错误结束。然后,开始一个接一个地添加回导入,当您得到一个导入错误而不是一个名称错误时,只需按照导入操作对导入的文件进行操作。希望这有帮助。

        2
  •  1
  •   nikola    16 年前

    检查您的代码,看看是否从tinycomm s.*开始导入(注意“s”),而不是从tinycomm.*开始。有时,将相对导入和绝对导入混合使用,会出现类似这样的奇怪错误。