Администратор Django вызывает AttributeError

Я изучаю Django с помощью Django Book. Я запускаю python3.3.3 на своем Macbook Pro с Mavericks 10.9, и когда я включаю сайт администратора, я получаю сообщение «Произошла ошибка сервера. Пожалуйста, свяжитесь с администратором». в браузере ошибка "AttributeError: 'RegexURLResolver' объект не имеет атрибута '_urlconf_module'" с сервера Django. Я проверил (и опубликовал) свои файлы settings.py и urls.py и не вижу там никаких проблем...

Я нашел похожий элемент в GIT здесь, но не верю это относится к тому, что происходит со мной. Я подумал, что это может быть проблема с Mavericks, поэтому я запустил все обновления brew и обновление pip для django, но я все еще получаю эту ошибку...

Любые идеи?

Porta-PuterTwo:LearningDjango arana$ python3 manage.py runserver
Validating models...

0 errors found
December 03, 2013 - 21:42:20
Django version 1.6, using settings 'LearningDjango.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Traceback (most recent call last):
  File "/usr/local/lib/python3.3/site-packages/django/core/urlresolvers.py", line 339, in urlconf_module
    return self._urlconf_module
AttributeError: 'RegexURLResolver' object has no attribute '_urlconf_module'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.3/site-packages/django/core/handlers/base.py", line 101, in get_response
    resolver_match = resolver.resolve(request.path_info)
  File "/usr/local/lib/python3.3/site-packages/django/core/urlresolvers.py", line 318, in resolve
    for pattern in self.url_patterns:

URL.py:

from django.conf.urls import patterns, include, url
from LearningDjango.views import currentDatetime

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    url(r'^$', 'LearningDjango.views.home', name='home'),
    url(r'^time/$', currentDatetime),
    # url(r'^blog/', include('blog.urls')),

    # Uncomment the next line to enable the admin:
    # url(r'^admin/', include(admin.site.urls)),
    url(r'^admin/', include(admin.site.urls)),
)

настройки.py:

"""
Django settings for LearningDjango project.

For more information on this file, see
https://docs.djangoproject.com/en/1.6/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.6/ref/settings/
"""

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.6/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '#6wow&islp6!6@+$9b%j9@981k^@i_uf8^=u%7gp@0b_^j^6t9'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

TEMPLATE_DEBUG = True

ALLOWED_HOSTS = []


# Application definition

INSTALLED_APPS = (
     'django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.messages',
     'django.contrib.sessions',
     'django.contrib.staticfiles',
    'books',
)

MIDDLEWARE_CLASSES = (
     'django.contrib.sessions.middleware.SessionMiddleware',
     'django.middleware.common.CommonMiddleware',
     'django.middleware.csrf.CsrfViewMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
     'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

ROOT_URLCONF = 'LearningDjango.urls'

WSGI_APPLICATION = 'LearningDjango.wsgi.application'


# Database
# https://docs.djangoproject.com/en/1.6/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
    }
}

# Internationalization
# https://docs.djangoproject.com/en/1.6/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'EST'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.6/howto/static-files/

STATIC_URL = '/static/'

TEMPLATE_DIRS = (
    os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/'),
)

person Arana    schedule 04.12.2013    source источник
comment
Я знаю, что это странно, но можете ли вы поменять местами CommonMiddleware и SessionMiddleware в настройках и попробовать еще раз?   -  person karthikr    schedule 04.12.2013
comment
Какую версию джанго вы используете?   -  person Brenda J. Butler    schedule 04.12.2013
comment
Спасибо Картикр, но это не имело никакого значения. Я думаю, может быть проблема с python 3?   -  person Arana    schedule 04.12.2013
comment
Я переключился на python 2.7.6, и теперь я получаю что-то еще. (ImportError at /admin/ Нет модуля с именем books.models) Я начинаю думать, что размещение папки с моделями в папке верхнего уровня было неправильным. Где это должно быть? С settings.py?   -  person Arana    schedule 04.12.2013


Ответы (2)


Я столкнулся с этой ошибкой при попытке запустить тестовый модуль, находящийся вне моего проекта django (похоже, практика django не поддерживает):

$ tree
.
├── example_project
│   ├── example_app
│   │   ├── __init__.py
│   │   └── models.py
│   ├── __init__.py
│   ├── manage.py
│   └── project
│       ├── __init__.py
│       ├── settings.py
│       ├── urls.py
│       └── wsgi.py
└── test
    └── test_example_app.py

Ошибка была вызвана тем, что django использовал другой путь импорта в разных точках процесса, поэтому я решил ее, добавив к sys.path. Я бы не решился делать это в производственной среде, но я могу принять некоторую хакерство в тестах.

Вот что у меня получилось в test_example_app.py:

import os
import sys

import django
from django.conf import settings
from django.test import LiveServerTestCase
from django.test.utils import get_runner

class TestExampleApp(LiveServerTestCase):
   ...

if __name__ == '__main__':
    sys.path.append(os.path.realpath('./example_project'))
    os.environ['DJANGO_SETTINGS_MODULE'] = 'example_project.project.settings'
    django.setup()

    sys.path.append(os.path.realpath('./example_project/project'))
    testrunner = get_runner(settings)()
    failures = testrunner.run_tests(['test_example_app'])
    sys.exit(bool(failures))
person Ryne Everett    schedule 08.09.2015

Решение, как мне кажется странным, заключалось в том, что я указал корневую папку в качестве начала импорта для books.models в файле views.py. Это, казалось, не только взорвало запуск администратора, но и ошибка, которую он дал, не дала много, если вообще, указала на корневую проблему. Только когда я откатился к Python 2.7, сообщение об ошибке дало мне некоторое указание на корень проблемы. Я предполагаю, что это классический неофитский материал, поскольку теперь кажется очевидным, что «корнем» сайта должна быть папка с manage.py в ней, и, следовательно, не должно быть никакой спецификации пути. Хотя в книге об этом не говорится...

person Arana    schedule 08.12.2013