【问题标题】:Django: 'module' object has no attribute 'index'Django:“模块”对象没有属性“索引”
【发布时间】:2013-07-26 11:28:13
【问题描述】:

过去几天我一直在尝试学习 Django,但最近我偶然发现了一个我似乎无法解决的问题。在完成了 Django 自己编写的第一个应用程序的教程后,我决定再看一遍。只是现在我会替换所有东西以适应我正在构建的原始应用程序的要求。

所以,在我进入第 3 部分之前,一切都很顺利。当我尝试加载 http://localhost:8000/lru/ 时,我收到以下错误消息:

AttributeError at /lru/
'module' object has no attribute 'index'

追溯:

Internal Server Error: /favicon.ico
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/django/core/handlers/base.py", line 92, in get_response
    response = middleware_method(request)
  File "/Library/Python/2.7/site-packages/django/middleware/common.py", line 69, in process_request
    if (not urlresolvers.is_valid_path(request.path_info, urlconf) and
  File "/Library/Python/2.7/site-packages/django/core/urlresolvers.py", line 551, in is_valid_path
    resolve(path, urlconf)
  File "/Library/Python/2.7/site-packages/django/core/urlresolvers.py", line 440, in resolve
    return get_resolver(urlconf).resolve(path)
  File "/Library/Python/2.7/site-packages/django/core/urlresolvers.py", line 319, in resolve
    for pattern in self.url_patterns:
  File "/Library/Python/2.7/site-packages/django/core/urlresolvers.py", line 347, in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
  File "/Library/Python/2.7/site-packages/django/core/urlresolvers.py", line 342, in urlconf_module
    self._urlconf_module = import_module(self.urlconf_name)
  File "/Library/Python/2.7/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/Users/oyvindhellenes/Desktop/Sommerjobb 2013/mysite/mysite/urls.py", line 10, in <module>
    url(r'^lru/', include('lru.urls', namespace="lru")),
  File "/Library/Python/2.7/site-packages/django/conf/urls/__init__.py", line 25, in include
    urlconf_module = import_module(urlconf_module)
  File "/Library/Python/2.7/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/Users/oyvindhellenes/Desktop/Sommerjobb 2013/mysite/lru/urls.py", line 6, in <module>
    url(r'^$', views.index, name='index')
AttributeError: 'module' object has no attribute 'index'

我的代码:

views.py

from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world. You're at the poll index.")

lru/urls.py

from django.conf.urls import patterns, url

from lru import views

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

mysite/urls.py

from django.conf.urls import patterns, include, url

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^polls/', include('polls.urls', namespace="polls")),
    url(r'^admin/', include(admin.site.urls)),
    url(r'^lru/', include('lru.urls', namespace="lru")),
)

我的文件夹结构如下:

mysite/
    lru
    templates
    polls
    manage.py
    mysite

lru/
    templates
    urls.py
    admin.py
    __init__.py
    models.py
    tests.py
    views.py

这很奇怪,因为我所做的一切都与我在“民意调查”示例教程中所做的完全一样。只是换个名字。当我在 mysite/urls.py 中注释掉 url(r'^lru/', include('lru.urls', namespace="lru")), 时,http://localhost:8000/polls/ 工作正常,但我似乎无法让 /lru 工作。

这真的让我很生气,所以任何形式的帮助都将不胜感激!

编辑:添加完整的回溯

【问题讨论】:

  • 错误出现在哪个文件和哪个行?
  • 你能显示完整的回溯吗?

标签: python django django-views


【解决方案1】:

将 urls.py 模块导入您的视图。像这样;

from django.http import HttpResponse
from . import urls

def index(request):
    return HttpResponse("Hello, world. You're at the poll index.")

【讨论】:

    【解决方案2】:

    要么这样做:

    from lru.views import *
    
    urlpatterns = patterns(
        '',
        url(r'^$', index, name='index')
    )
    

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

    我希望这会有所帮助。

    【讨论】:

    • 这解决了我的问题。谢谢!但我不明白为什么 /polls 不导入就可以工作......
    • 我认为在将答案标记为正确之前等待一天是个好主意,因为即使答案似乎可以解决问题,有时也不是最理想的。在这个特定的答案中,我不喜欢第一个解决方案中的import *(这是不好的做法),我不明白为什么第二个解决方案中需要from lru import views 语句。
    • 你可能是对的。我是新来的,所以还不知道规范。至于导入语句(from lru import views)。如果我删除它,我会得到NameError at /lru/ name 'views' is not defined,所以我猜它需要它。
    • 是的,我同意先生,这也是关于最佳实践的,但这就是你自己需要考虑的地方是应该是from lru.views import *还是应该是from lru.views import view1, view2。这取决于当前的情况,但很明显,如果你正在制作视图而不是它们总是映射到某个 url,我想如果我是正确的,在第二种情况下 from lru import views .. 这是他的要求......他要求解决这个问题..
    • -1。这是一个糟糕的答案。您不需要both 来导入视图文件 来使用字符串:任何一个都使另一个无关紧要。
    【解决方案3】:

    url() 的第二个参数应该是字符串,否则我会将lru/urls.py 更改为:

    from django.conf.urls import patterns, url
    
    urlpatterns = patterns('',
        url(r'^$', 'lru.views.index', name='lru-index')
    )
    

    希望对你有帮助!

    【讨论】:

      【解决方案4】:

      我刚刚发现 Sublime 文本混合了 .... 和制表符进行缩进,我猜这取决于复制/粘贴源。

      【讨论】:

        【解决方案5】:

        这就是 Django URL 的工作原理:

        1. 来自mysite/mysite/urls 的url 中包含mysite/polls/urls,表示在mysite 项目中创建了投票;
        2. mysite/polls/urls 文件告诉我们,无论何时访问 URL“polls/”,都应该从 mysite/polls/views 调用函数 index(),这就是您键入该行时的状态:
            urlpatterns = [    
                path('', views.index, name = 'index'),    
            ]
        
        1. 要记住的一件非常重要的事情是在运行服务器之前保存每个已编辑的文件,以便文件得到更新。您还可以保持服务器运行并保存文件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-11-17
          • 1970-01-01
          • 1970-01-01
          • 2011-10-26
          • 1970-01-01
          • 1970-01-01
          • 2013-12-15
          相关资源
          最近更新 更多