2015-12-23 4 views
1

я развиваюсь свою версию Django до 1,9 (до этого я имел 1.6 или 1.7), так что я изменить многие вещи obseltes ...Джанго, обновление до 1.9

Но у меня есть проблема с тезисами линий в моих URLs. ру:

import django 
import main_app 
from django.conf.urls import patterns, include, url 
from django.views.generic import TemplateView, ListView 
from django.contrib import admin 
from django.conf import settings 
from django.conf.urls.static import static 
from main_app.views import * 
from main_app.views import password_reset_confirm 
... # many urls 
url(r'^authentification/$', django.contrib.auth.views.login), 
url(r'^forget/send/$', django.contrib.auth.views.password_reset_done), 
url(r'^password/$', django.contrib.auth.views.password_reset), 
url(r'^password_forget/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$', main_app.views.password_reset_confirm), 
url(r'^password-init/$', django.contrib.auth.views.password_reset_complete), 

Я имею эту ошибку, когда я пишу "питон manage.py runserver":

Unhandled exception in thread started by <function wrapper at 0x7f5bcf01af50> 
Traceback (most recent call last): 
File "/usr/local/lib/python2.7/dist-packages/django/utils/autoreload.py", line 226, in wrapper 
fn(*args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/runserver.py", line 116, in inner_run 
self.check(display_num_errors=True) 
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 426, in check 
include_deployment_checks=include_deployment_checks, 
File "/usr/local/lib/python2.7/dist-packages/django/core/checks/registry.py", line 75, in run_checks 
new_errors = check(app_configs=app_configs) 
File "/usr/local/lib/python2.7/dist-packages/django/core/checks/urls.py", line 10, in check_url_config 
return check_resolver(resolver) 
File "/usr/local/lib/python2.7/dist-packages/django/core/checks/urls.py", line 19, in check_resolver 
for pattern in resolver.url_patterns: 
File "/usr/local/lib/python2.7/dist-packages/django/utils/functional.py", line 33, in __get__ 
res = instance.__dict__[self.name] = self.func(instance) 
File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py", line 417, in url_patterns 
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) 
File "/usr/local/lib/python2.7/dist-packages/django/utils/functional.py", line 33, in __get__ 
res = instance.__dict__[self.name] = self.func(instance) 
File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py", line 410, in urlconf_module 
return import_module(self.urlconf_name) 
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module 
__import__(name) 
File "/home/yb/web/carzuip/carzuip/urls.py", line 55, in <module> 
url(r'^authentification/$', django.contrib.auth.views.login), 
NameError: name 'django' is not defined 

Я не понимаю, почему у меня есть проблема только с теми 5 URLs ??!

Спасибо-х

+1

Вы импортируете django? ... – Sayse

+0

Heu logicaly yes, я обновляю сообщение, потому что вы можете увидеть мой импорт. – Zoulou

ответ

4

Этот код не показать вам импорта django: он показывает вам импортировать элементы под ним, но никогда само название. Это фундаментальный принцип Python, который вы должны импортировать или определять каждое имя, которое вы используете. В вашем случае import django в верхней части будет работать, хотя обратите внимание, что тогда у вас возникнет другая проблема, когда код попадет на URL-адрес password_reset, поскольку на него ссылаются от main_app, который вы еще не импортировали.

+0

Вы не «импортируете django» в urls.py, здесь есть большая проблема. – GordonsBeard

+0

самой первой строкой является '' import django'' – allo

+0

@allo, которую OP добавил после моего ответа. –

2

Попробуйте создать новый проект с помощью django-admin startproject и скопируйте необходимые настройки/скопируйте файлы manage.py и wsgi.py.

В некоторых выпусках произошли изменения, т. Е. О том, как модуль wsgi импортирует определенные материалы django. Большинство проектов можно легко воссоздать, и у вас есть новейшие значения django в файлах.

Это, конечно, просто догадка, но стоит попробовать. Если вы используете virtualenv, вам может понадобиться обновить некоторые вещи внутри, когда ваш python был обновлен/вы переместили virtualenv. Иногда такие вещи могут быть довольно раздражающими.

+1

Я уже создаю новый проект с django-admin startproject ^^ – Zoulou

+0

Вы немного поиграли с './manage.py shell''? Установите '' ipython'' перед этим, тогда вы можете делать такие вещи, как '' django? '' (Текст справки) и '' django ?? '' (help + source) – allo

+0

Да, я уже играю с оболочкой, и это работает правильно ^^ .. Я никогда не устанавливал ipython, что это за технология? – Zoulou

2

Решено!

Euh Я думаю ...

Просто добавить эти строки:

from django.contrib.auth.views import login 
from django.contrib import auth 

И это работает!

Это нормально?

+0

Действительно, в исходном коде вы не импортировали '' django.contrib.auth.views.login''. Попробуйте это в оболочке python: '' print django.foo'', и вы получаете '' NameError: name 'django' не определен'' – allo

+0

Кстати, чтобы избежать импорта (и, возможно, кругового импорта), вы можете указать представления как строку, то есть '' url (r '^ authentification/$ ', "django.contrib.auth.views.login") ''. Я думаю, вы также получите более четкие сообщения об ошибках. Или, как и сейчас, импортируйте функцию, а не весь модуль. – allo

+1

Спецификация представлений в виде строк устарела и будет отсутствовать в 1.10. –

Смежные вопросы