Django 无法导入名称视图

Posted

技术标签:

【中文标题】Django 无法导入名称视图【英文标题】:Django Cannot import name views 【发布时间】:2013-10-03 20:04:56 【问题描述】:

所以我试图通过在 DjangoProject 上做“第一个 Django 应用程序”的事情来加快 Django 的副项目,但是当我第一次尝试设置视图时,我收到了这个奇怪的消息.

ImportError at /index
cannot import name views
Request Method: GET
Request URL:    http://localhost:8000/index
Django Version: 1.5.4
Exception Type: ImportError
Exception Value:    
cannot import name views
Exception Location: /Users/Dev/Desktop/socialSignIn/socSignInLocater/polls/admin.py in <module>, line 2
Python Executable:  /usr/bin/python
Python Version: 2.7.2
Python Path:    
['/Users/Dev/Desktop/socialSignIn/socSignInLocater',
 '/Library/Python/2.7/site-packages/setuptools-1.1.6-py2.7.egg',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC',
 '/Library/Python/2.7/site-packages']
Server time:    Thu, 3 Oct 2013 15:58:02 -0400

它说错误出现在我的 root/polls/admin.py 第二行,并且似乎抱怨无法导入“视图”。问题是我没有尝试在

中导入视图
admin.py

#admin.py
from django.contrib import admin
from polls.models import Choice
from polls.models import Poll
# admin.site.register(Poll)

class ChoiceInline(admin.TabularInline):
    model = Choice
    extra = 1

class PollAdmin(admin.ModelAdmin):
    fields = ["pub_date", "question"]
    inlines = [ChoiceInline]
    list_display = ("question", "pub_date", "was_published_recently")
    list_filter = ['pub_date']
    sarch_fields = ['question']
    date_heirarchy = 'pub_date'

admin.site.register(Poll, PollAdmin)

# admin.site.register(Choice)

错误消息还表明问题是对 Choice 模型的导入调用,但这也不会调用视图。

#models.py
from django.db import models
import datetime
from django.utils import timezone

# Create your models here.

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_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

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

关于如何解决这个问题的任何想法?

更新:

#views.py
from django.http import HttpResponse
# from django.views.generic.base import TemplateView

def index(request):
    return HttpResponse("You found the Poll Index.")

#urls.py
from django.conf.urls.defaults import * #patterns, url
#
from polls import views

urlpatterns = patterns('',
    url(r'^$', views.index, name='index')
)

更新#2: 奇怪的是,如果我注释掉整个 admin.py 文件,并将from polls import views 重新定义为import views,那么它可以工作,但这样做我已经杀死了我的管理部分。有什么想法吗?

【问题讨论】:

你有views.py 吗? 请包括urls.pyviews.py。我的猜测是问题在于导入与/index url 关联的视图。 添加了请求的文件 警告 here 暗示“您使用的 Django 版本可能与本教程版本不匹配”。 已经检查过了。我正在使用 1.5.4,并且正在使用 1.5 教程。 【参考方案1】:

您的地址栏中有:

http://localhost:8000/index

但是你的 urls.py 说:

urlpatterns = patterns('',
    url(r'^$', views.index, name='index')
)

所以,Django 实际上是在尝试查找:

http://localhost:8000/

这就是它找不到第一个 URL 的原因。

【讨论】:

即使使用 localhost:8000/index 它也会返回相同的错误。该 URL 只是我在转向 SO 之前尝试的最后一个 URL。上面的代码肯定有问题。【参考方案2】:

好的,所以我“修复”了这个错误,尽管我不知道它为什么会起作用。

在 admin.py 中,我更改了来自

的导入
from django.contrib import admin
from polls.models import Choice
from polls.models import Poll

import views
from django.contrib import admin
from models import *

也许它与文件组织有关?无论如何,感谢 cmets 伙计们。

【讨论】:

对我来说,错误出现在 views.py 中,而不是在 urls.py 中【参考方案3】:

遇到同样的问题: 在 Windows7 上,IDE IntelliJ IDEAmodels.py 当导入是这样的:

from django.db import models

from django.utils import timezone
import datetime

我收到错误:

ImportError: cannot import name Poll

当我将导入(使用 IntelliJ Ctrl+Alt+l 中的代码重新格式化)更改为:

import datetime

from django.db import models

from django.utils import timezone

一切都开始神奇地工作:)

【讨论】:

以上是关于Django 无法导入名称视图的主要内容,如果未能解决你的问题,请参考以下文章

无法导入名称视图

无法使用视图名称 (django-rest-framework) 解析超链接关系的 URL

视图中的 Django 导入错误 - 没有名为“x”的模块

django.core.exceptions.ImproperlyConfigured:无法使用视图名称“用户详细信息”解析超链接关系的 URL

Django 基于类的视图中的字段派生模板名称

在另一个应用视图中导入 django 应用视图