【问题标题】:ViewDoesNotExist error on linux but same code works on windows, why?Linux 上的 ViewDoesNotExist 错误,但相同的代码在 Windows 上有效,为什么?
【发布时间】:2013-08-12 16:13:33
【问题描述】:

我目前正在尝试学习 django,并且一直在琢磨在本地机器上建立网站的想法。我遇到了以下似乎无法解决的错误。

当我在我的 windows 机器上运行开发服务器时,一切都按我的预期工作,但是,当我在我的 linux 机器上运行(相同的)代码时,我得到一个 ViewDoesNotExist 错误。但是,views.py 文件中肯定存在视图,并且路径设置正确(正如我从回溯中看到的那样)。

我已经读到,出于某种原因,django 有时会提供这些错误消息,而实际上它有其他问题,可能是由 views.py 文件导入的问题,所以我运行了

python manange.py shell

并尝试导入我的视图,但失败了。但是我的views.py文件除了从我的models.py文件中导入我的模型之外没有其他任何东西,所以我尝试手动导入它们,我发现只有一个模型可以正确导入,另外两个总是会失败,例如尝试运行时:

from racing.models import Event

我收到以下错误

ImportError: cannot import name Event

但是,当我运行时:

from racing.models import Race

它工作正常,我可以在 shell 中使用 Race 类

好像连它们都看不到?所有代码都可以在这里找到: https://github.com/sj175/ulmk

如果有人能帮我弄清楚如何解决这个错误,以便我可以继续在我的 linux 机器上使用 django,我将不胜感激。

【问题讨论】:

    标签: python django python-2.7 django-views


    【解决方案1】:

    使用 djangos manage.py startproject 应该创建如下目录:

    cms/
        manage.py
        cms/
            __init__.py
            settings.py
            urls.py
            wsgi.py
    

    cms 似乎就是这种情况。但看起来你的 apps 是一个比它们应该更高的目录:

    cms/
        manage.py
        cms/
            __init__.py
            settings.py
            urls.py
            wsgi.py
    coltrane/
    racing/
    tagging/
    

    默认情况下,我认为这些应用程序应该在 cms 目录中,即在您的 django 项目中

    cms/
        manage.py
        cms/
            __init__.py
            settings.py
            urls.py
            wsgi.py
        coltrane/
        racing/
        tagging/
    

    所以我猜你的应用程序在 windows 中的 pythonpath 上,而在 linux 上,它们不是

    【讨论】:

    • 你说得对,我的目录结构很奇怪。但是,这绝对不是路径问题,因为我可以从 race.models 导入 Race 类,而不是 Event 或 Participant 类。
    • @SamJones 我对您的存储库进行了干净的签出,并将应用程序移到了cms 目录中,之后一切正常,我在 ubuntu 11.10
    • 你说得对,我尝试更改目录结构,现在它可以工作了。很抱歉我之前没有听。我对这两个答案都投了赞成票并选择了这个,因为它在描述修复时更加明确。谢谢。
    【解决方案2】:

    我认为您的文件夹结构有问题。您的 manage.py 位于 cms 内,而 racing 位于 cms

    请仔细阅读文档 django docs

    【讨论】:

    • 如上,你说得对,我的目录结构很奇怪,但我不明白这是如何导致问题的。
    • 这就是 django 的工作原理。如果你检查你的 manage.py 文件 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cms.settings") os.environ documentation 确实声明 os.environ.setdefault 进行映射。 DJANGO_SETTINGS_MODULE 定义了您正在使用的设置,这里您使用的是 cms.settings。而 racing 则超出了它的能力范围。如果您正在学习基础知识,只需通过django docs
    • 那么我为什么可以访问赛车中的一个课程而不是其他两个课程?我不应该无法访问其中任何一个吗?
    • 我刚刚从 github 中提取了您的代码。并在运行python manage.py shell 时生成此错误 ImportError: No module named Racing 这几乎是不言自明的。现在您最近对代码进行了更改吗?如果是,那么推
    • 我从未收到该错误消息。我也没有从主人那里做任何改变。我发现在同一个文件中的三个类中有些可以导入但其他类不能导入,这是目录结构的问题,这非常奇怪。我不明白当所有三个类都在同一个文件中时,python 是如何知道其中一个类在哪里而不知道另外两个在哪里。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 2021-07-27
    • 2021-10-15
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 2022-10-19
    相关资源
    最近更新 更多