2013-07-26 10 views
5

Próbowałem nauczyć się Django przez ostatnie kilka dni, ale ostatnio natknąłem się na problem, którego nie mogę naprawić. Po skończeniu samouczka Django o napisaniu pierwszej aplikacji postanowiłem przejść przez to jeszcze raz. Dopiero teraz zamieniłem wszystko, aby pasowało do wymagań oryginalnej aplikacji, którą budowałem.Django: obiekt 'module' nie ma atrybutu 'index'

Tak, wszystko poszło dobrze, dopóki nie dostał się do części 3. Kiedy próbuję załadować http://localhost:8000/lru/ pojawia się następujący komunikat o błędzie:

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

Traceback:

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' 

Mój kod:

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")), 
) 

Moja struktura folderów wygląda następująco:

mysite/ 
    lru 
    templates 
    polls 
    manage.py 
    mysite 

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

To dziwne, bo zrobiłem wszystko dokładnie tak, jak Zrobiłem to w przykładzie z "ankietami". Po prostu zastępuję imiona. Kiedy komentuję url(r'^lru/', include('lru.urls', namespace="lru")), w mysite/urls.py, wtedy http://localhost:8000/polls/ działa dobrze, ale po prostu nie mogę sprawić, że/lru zadziała.

To naprawdę mnie zabija, więc każda forma pomocy byłaby doceniana!

Edycja: Dodano pełną traceback

+0

W którym pliku i linii występuje błąd? –

+0

Czy możesz pokazać pełne informacje zwrotne? –

Odpowiedz

3

Albo to zrobić:

from lru.views import * 

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

lub

from lru import views 

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

Mam nadzieję, że to pomaga.

+0

Naprawiłem mój problem. Dziękuję Ci! Ale nie rozumiem, dlaczego/ankiety działają bez importowania ... –

+0

Myślę, że dobrze jest poczekać na jeden dzień przed zaznaczeniem odpowiedzi jako poprawnej, ponieważ odpowiedzi są czasem nieoptymalne, nawet jeśli wydają się rozwiązywać problem. W tej konkretnej odpowiedzi nie podoba mi się "import *" w pierwszym rozwiązaniu (jest to zła praktyka) i nie rozumiem, dlaczego w drugim rozwiązaniu potrzebne jest wyrażenie 'from lru import views'. –

+0

Twoje prawdopodobnie prawo. Jestem tu nowy, więc jeszcze nie znam norm. Jeśli chodzi o instrukcję importu ('z lru widoków importu'). Otrzymuję 'NameError at/lru/ nazwa 'views' nie jest zdefiniowana' jeśli usunę go, więc myślę, że jest potrzebny. –

1

Drugi argument url() powinien być ciąg Anway chciałbym zmienić lru/urls.py do:

from django.conf.urls import patterns, url 

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

Nadzieję, że to pomaga!

1

Zaimportuj moduł urls.py do swojego widoku. lubię to;

from django.http import HttpResponse 
from . import urls 

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