如何在Django中解决这些Python错误?

时间:2012-01-22 21:04:09

标签: python django eclipse pydev

我正试图通过Django项目的教程。

我已经做到了这一点:https://docs.djangoproject.com/en/1.3/intro/tutorial02/#s-make-the-poll-app-modifiable-in-the-admin但是我发现某些文件中存在错误,例如在admin.py文件中:

from polls.models import Poll
from django.contrib import admin

admin.site.register(Poll)

我收到了错误

Unresolved import: Poll

模型的定义如教程中所述:

import datetime

from django.db import models

class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    def __unicode__(self):
        return self.question
    def was_published_today(self):
        return self.pub_date.date() == datetime.date.today()

class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice = models.CharField(max_length=200)
    votes = models.IntegerField()
    def __unicode__(self):
        return self.choice

本教程指出,当我在添加管理文件后重新启动服务器时,我应该看到管理页面中引用的轮询应用程序位于127.0.0.1:8000,但我所看到的只是:

Model admin without registered models

我也看到了

Unresolved import: Poll admin.py    /newProj/src/newProj/polls  line 0  PyDev Problem
Unresolved import: settings manage.py   /firstproject/firstproject  line 10 PyDev Problem
Unresolved import: settings manage.py   /newProj/src/newProj    line 10 PyDev 

错误是我不会看到使用民意调查应用更新网站管理页面的原因吗?

如何解决这些错误?

4 个答案:

答案 0 :(得分:2)

/newProj/src/newProj/polls/firstproject/firstproject ... eeek,这看起来很诚实,就像是一些问题的根源。好的,一些概念:

Python包:所有python应用程序都可以由包组成。这些基本上只是包含__init__.py文件的目录。

python如何找到软件包:嗯,python在查找软件包时可以做两件事之一:

  • 如果当前目录是包,即包含__init__.py,则可以从其中的文件导入。
  • 它可以搜索python路径(PYTHONPATH环境变量,或sys.path - 相同的东西),然后搜索到子包。

django项目如何布局:默认的django项目如下所示:

project_folder/
    __init__.py
    settings.py      # config
    urls.py          # url config
    polls/
        __init__.py  # makes polls a package
        models.py    # models
        admin.py     # admin
        views.py     # app views
        forms.py     # per app forms
        urls.py      # per app urls

在此布局中,当您admin.py时,runserver有两种可能性:

  • from models import Poll - 这是有效的,因为您仍然在您的包裹范围内。
  • from polls.models import Poll - 之所以有效,是因为polls是一个软件包,因此您运行的父级runserver也是如此。

虽然很诱人,但不要将project_folder用作包。一旦重命名目录,它就会破坏代码(例如,在部署期间)。

所以,记住这一切:

  • 验证您的__init__.py文件是否存在于正确的位置,并且您正在使用类似上面的目录结构。也可能最好在IDE外面检查 - IDE可能很难。
  • 验证您的路径正在搜索您认为的位置。当前目录应该可以正常工作;如果不是,你可以看到

    import sys
    print sys.path
    

    将允许您查看您正在寻找的位置。您可以显式添加当前目录,但您不需要。

  • 我不喜欢PyDev。这里完全是个人偏好,但我发现它很难,超出了通常的选择编辑器+终端+文件浏览器。您也可以这样做,特别是如果您发现文件浏览器中的目录结构与您认为的IDE目录结构完全不同。

答案 1 :(得分:1)

您正在使用Pydev,它在导入过程中添加了一个额外的抽象层。

使用浅色文本编辑器和控制台进行学习。一旦Python Path和导入逻辑足够清晰,您就可以切换到IDE,这样您就可以自己设置Pydev了。

答案 2 :(得分:0)

  

错误是我不能看到网站的原因   使用民意调查应用程序更新管理页面?

此问题的答案位于https://docs.djangoproject.com/en/1.3/intro/tutorial02/#customize-the-admin-form

的同一页面

答案 3 :(得分:0)

试试这个:

import newProj.poll.models