1

Django 프로젝트에서 장고 등록 전자 메일을 사용하고 있습니다. 문서 (Django-Registration-Email)에 REGISTRATION_EMAIL_REGISTER_SUCCESS_URLsettings.py에 추가하라는 메시지가 표시됩니다. 그러나이 유형의 오류의 원인이되는 다음 settings.py에서Django 등록 'str'개체를 호출 할 수 없습니다.

'str' object is not callable 

를, 나는 같은 리디렉션 URL 설정 :

REGISTRATION_EMAIL_REGISTER_SUCCESS_URL = '/accounts/register/complete/' 

을 그리고 URL은 같은 복사 :

url(
    r'^accounts/register/$', 
    RegistrationView.as_view(
     template_name='registration/registration_form.html', 
     form_class=CustomEmailRegistrationForm, 
     get_success_url=getattr(
      settings,'REGISTRATION_EMAIL_REGISTER_SUCCESS_URL', 
      lambda request, user:'/'), 
    ), 
    name='registration_register', 
), 

그리고 디버그 정보는 첫 번째 오류가 /local/lib/python2.7/site-packages/registration/views.py in form_valid에서 온다고 말했습니다.

표시된 오류 라인은

success_url = self.get_success_url(request, new_user) 

전체 블록은

def form_valid(self, request, form): 
    new_user = self.register(request, **form.cleaned_data) 
    success_url = self.get_success_url(request, new_user) 

    # success_url may be a simple string, or a tuple providing the 
    # full argument set for redirect(). Attempting to unpack it 
    # tells us which one it is. 
    try: 
     to, args, kwargs = success_url 
     return redirect(to, *args, **kwargs) 
    except ValueError: 
     return redirect(success_url) 

역 추적은 다음과 같습니다

Traceback: 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    114.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/views/generic/base.py" in view 
    69.    return self.dispatch(request, *args, **kwargs) 
File "/Library/Python/2.7/site-packages/registration/views.py" in dispatch 
    79.   return super(RegistrationView, self).dispatch(request, *args, **kwargs) 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/views/generic/base.py" in dispatch 
    87.   return handler(request, *args, **kwargs) 
File "/Library/Python/2.7/site-packages/registration/views.py" in post 
    35.    return self.form_valid(request, form) 
File "/Library/Python/2.7/site-packages/registration/views.py" in form_valid 
    83.   success_url = self.get_success_url(request, new_user) 

Exception Type: TypeError at /accounts/register/ 
Exception Value: 'str' object is not callable 

은 누구도 날이 문제를 해결하는 데 도움이 수 있습니까? 고마워요! 나는이 문제로 하루 종일 붙어있다!

+0

전체 Traceback을 게시 할 수 있습니까? – shaktimaan

+0

과 관련이 있습니까? http://stackoverflow.com/questions/10809240/typeerror-str-object-is-not-callable-django-python?rq=1 – faboolous

+0

역 추적 URL과 리디렉션 URL 설정을 추가했습니다. –

답변

0

OK, 당신이 당신의 URL 핸들러에

get_success_url=getattr(
     settings,'REGISTRATION_EMAIL_REGISTER_SUCCESS_URL', 
     lambda request, user:'/'), 
) 

를 사용하여, 당신은 문자열로 get_success_url을 설정하고 있습니다. 그런 다음 변수로 전달하려고 함수로 form_valid에서 호출합니다. 문제입니다

+0

안녕하세요 GAEfan, 답변 해 주셔서 감사합니다. 실제로 나는 Django 등록 이메일 (링크 : https://github.com/bitmazk/django-registration-email)의 문서에서이 코드 블록을 복사합니다. 난 그들이 백엔드보기로 리디렉션 URL을 전달하려고하는 것 같아요. 그것을 고치는 방법을 알고 있습니까? 고마워, 당신의 대답은 매우 도움이됩니다! –

+0

django-registration과 django-registration-email의 두 가지 패키지를 섞어 쓰고 있습니다. 그들의 URL 핸들러는 다릅니다. REGISTRATION_EMAIL_REGISTER_SUCCESS_URL = '/ accounts/register/complete /'를'settings.py'에 넣으면'get_success_url'은 항상 그것을 문자열로 반환합니다.하나의 패키지 또는 다른 패키지를 선택하여 독점적으로 사용해야합니다. – GAEfan

+0

django-registration-email은 django 등록을 기반으로하는 패키지이므로 설명서에 설명 된대로 settings.py의 installed_apps에 둘 다 포함해야합니다. "getattr (설정, 'REGISTRATION_EMAIL_REGISTER_SUCCESS_URL', 람다 요청, 사용자 : '/')"이 무엇인지 알고 있습니까? 왜 람다를 사용합니까? django-registration-email을 사용하여 유감스럽게 생각합니다 –

0

마지막으로, 나는 찾을 : REGISTRATION_EMAIL_REGISTER_SUCCESS_URL이

그래서 문자열이 아닌 기능을 기대 나는 settings.py에 한 줄 함수를 추가해야

REGISTRATION_EMAIL_REGISTER_SUCCESS_URL = lambda request, user: '/activate/complete/' 

어쨌든 django-registration-email가 더 이상 유지되지 않으므로 allauth로 이동하고 싶습니다.

관련 문제