2012-01-22 34 views
2

我試圖通過Django Project的教程。如何解決Django中的這些Python錯誤?

我已經做到了這一點: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 

是錯誤的,爲什麼我不會看到與投票程序更新了網站管理頁面的原因是什麼?

如何解決這些錯誤?

+0

http://klaith.wordpress.com/2009/06/12/pydev-unresolved-import-errors/ – dm03514

+0

這些Pydev的錯誤,而不是Python的錯誤。聽起來像你的IDE正在阻礙。 –

回答

1

您正在使用Pydev的,這在進口過程中添加抽象的附加層。

使用輕型文本編輯器和控制檯進行學習。一旦Python Path和導入邏輯足夠清晰,您就可以切換到IDE,以便您可以自己設置Pydev。

2

/newProj/src/newProj/polls/firstproject/firstproject ... eeek,這看起來是誠實的,像一些問題的來源。好吧,一些概念:

Python包:所有的python應用程序都可以由包構成。這些基本上只是包含__init__.py文件的目錄。

如何蟒蛇發現包:嗯,蟒蛇可以做兩件事情之一,當它看起來套餐:

  • 如果當前目錄是一個包,即包含__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相比完全不同。
0

試試這個:

import newProj.poll.models 
+0

這不是有效的python,並給出了一個'SyntaxError'。 –