2015-10-19 3 views
0

Привет У меня возникли проблемы разрешающую это,неподдерживаемый тип операнда (ов) для +: «RegexURLPattern» и «ул»

Я последовал http://blackglasses.me/2013/09/17/custom-django-user-model/ учебник.

Я не могу вспомнить, но я думаю, что я где-то читал, что если вы используете функциональные представления, вы должны что-то импортировать, но не уверены, что это так или если это правда.

Вот мой код urls.py в приложении счетов

from django.conf.urls import patterns, url 
from accounts import views 

urlpatterns = patterns(
    url(r'^register$', 'accounts.views.register', name='register'), 
    url(r'^login$', 'accounts.views.login', name='login'), 
    url(r'^logout$', 'accounts.views.logout', name='logout'), 

)

в главном urls.py

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

urlpatterns = ['', 
    url(r'^accounts/', include('accounts.urls', namespace='accounts')), 
    url(r'^admin/', include(admin.site.urls)), 
    ] 

Ниже сообщение об ошибке и отслеживающий

Environment: 
Django Version: 1.8.5 
Python Version: 3.4.0 

Request Method: GET 
Request URL: http://127.0.0.1:8777/ 

Django Version: 1.8.5 
Python Version: 3.4.0 


Request Method: GET 
Request URL: http://127.0.0.1:8777/ 
Django Version: 1.8.5 
Exception Type: TypeError 
Exception Value:  
unsupported operand type(s) for +: 'RegexURLPattern' and 'str' 
Exception Location: /home/kevin/djangoP/envRU/lib/python3.4/site-packages/django/core/urlresolvers.py in add_prefix, line 223 
Python Executable: /home/kevin/djangoP/envRU/bin/python 
Python Version: 3.4.0 


Traceback: 

    File "/home/kevin/djangoP/envRU/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response 
     119.     resolver_match = resolver.resolve(request.path_info) 

    File "/home/kevin/djangoP/envRU/lib/python3.4/site-packages/django/core/urlresolvers.py" in resolve 
     365.    for pattern in self.url_patterns: 


    File "/home/kevin/djangoP/envRU/lib/python3.4/site-packages/django/core/urlresolvers.py" in url_patterns 
     401.   patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) 

    File "/home/kevin/djangoP/envRU/lib/python3.4/site-packages/django/core/urlresolvers.py" in urlconf_module 
     395.    self._urlconf_module = import_module(self.urlconf_name) 

    File "/home/kevin/djangoP/envRU/lib/python3.4/importlib/__init__.py" in import_module 
     109.  return _bootstrap._gcd_import(name[level:], package, level) 

    File "/home/kevin/djangoP/ru/rulinked/rulinked/urls.py" in <module> 
     20.  url(r'^accounts/', include('accounts.urls', namespace='accounts')), 


    File "/home/kevin/djangoP/envRU/lib/python3.4/site-packages/django/conf/urls/__init__.py" in include 
     33.   urlconf_module = import_module(urlconf_module) 


    File "/home/kevin/djangoP/envRU/lib/python3.4/importlib/__init__.py" in import_module 
     109.  return _bootstrap._gcd_import(name[level:], package, level) 


    File "/home/kevin/djangoP/ru/rulinked/accounts/urls.py" in <module> 
     7.  url(r'^logout$', 'accounts.views.logout', name='logout'), 

    File "/home/kevin/djangoP/envRU/lib/python3.4/site-packages/django/conf/urls/__init__.py" in patterns 
     61.    t.add_prefix(prefix) 

    File "/home/kevin/djangoP/envRU/lib/python3.4/site-packages/django/core/urlresolvers.py" in add_prefix 
     223.   self._callback_str = prefix + '.' + self._callback_str 

    Exception Type: TypeError at/
    Exception Value: unsupported operand type(s) for +: 'RegexURLPattern' and 'str' 

Если yo Я читал, что далеки от этого, я знаю его много, но я действительно потерял и не знал, где еще можно получить помощь.

+1

Попробуйте 'views.register' вместо' accounts.views.register', то же самое для отдыха два и дайте мне знать, если он работает – MohitC

+0

@ red8alice это работает, если вы используете свои URL-адреса для этого: «urlpatterns = [ url (r '^ accounts /', include ('accounts.urls', namespace = 'accounts')), url (r '^ admin /', include (admin.site.urls)), ] "(я удалил пустую строку в urlpatterns) – user2719875

+0

Hi MohitC Я изменил его, и это помогло в сочетании с советом knbk. Спасибо за помощь – red8alice

ответ

1

Вы смешиваете два доступных синтаксиса.

Функция patterns() принимает префикс в качестве первого аргумента, который является (возможно, пустой) строкой и возвращает список с префиксом, добавленным к каждому шаблону. Другими аргументами являются url() экземпляров. Обычный список должен содержать только url() экземпляров, и вы не можете добавить общий префикс.

patterns() устарела, так что лучше использовать список везде:

счета/urls.py

urlpatterns = [ 
    url(r'^register$', 'accounts.views.register', name='register'), 
    url(r'^login$', 'accounts.views.login', name='login'), 
    url(r'^logout$', 'accounts.views.logout', name='logout'), 
] 

urls.py

urlpatterns = [ 
    url(r'^accounts/', include('accounts.urls', namespace='accounts')), 
    url(r'^admin/', include(admin.site.urls)), 
] 

Что касается импорта просмотров: вам нужно импортировать их, если вы передадите эту функцию. Если вы сначала не импортируете его, функция недоступна и приводит к NameError. Прямо сейчас вы передаете путь импорта, а не функцию, поэтому вам не нужно ничего импортировать. Это не рекомендуется, а также (для видов, не включая другие конфигурации URL), поэтому для совместимости с будущими версиями Django вы можете изменить его к этому:

from django.conf.urls import url 
from accounts import views 

urlpatterns = [ 
    url(r'^register$', views.register, name='register'), 
    url(r'^login$', views.login, name='login'), 
    url(r'^logout$', views.logout, name='logout'), 
] 

Обратите внимание, что второй аргумент url() больше не является строкой , но сама функция представления в импортированном модуле views.

+0

спасибо knbk, похоже, это сделал трюк, и спасибо вам за каждого, кто внес свой вклад. как примечание, не следует ли мне использовать импорт и структуру представлений, как я это сделал, поскольку он будет обесцениваться? еще раз поблагодарить – red8alice

0

Редактировать приложение urls.py к этому:

from django.conf.urls import patterns, url 
from accounts import views 

urlpatterns = patterns('', // add the empty string here 
    url(r'^register$', 'accounts.views.register', name='register'), 
    url(r'^login$', 'accounts.views.login', name='login'), 
    url(r'^logout$', 'accounts.views.logout', name='logout'), 
) 

Кроме того, удалить пустую строку из главного urls.py:

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

urlpatterns = [ 
    url(r'^accounts/', include('accounts.urls', namespace='accounts')), 
    url(r'^admin/', include(admin.site.urls)), 
    ] 

, потому что я DoNet думаю, что это необходимо при использовании квадратные скобки.