0

에 'success_url'을 전달 내가 this answer처럼 장고 등록의 클래스 기반 ActivationView에 success_url를 통과하고 싶은 기능 기반의 뷰 커버와 this answer는 RegistrationView에 대해 설명합니다. 내가 지금까지 실패 된 것을 시도 :CBV 장고 - 등록

url(r'^activate/(?P<activation_key>\w+)/$', 
    ActivationView.as_view({'success_url':'/activation_routing'}), 
    name='registration_activate',        
    ), 

반환

url(r'^activate/(?P<activation_key>\w+)/$', 
    ActivationView.as_view(success_url='/activation_routing'), 
    name='registration_activate',        
    ), 
: 나는 또한

및 시도했다 "형식 오류가 as_view()가 정확히 1 개 인수 (2 주어진) 소요"

은 "TypeError : ActivationView()가 잘못된 키워드 'success_url'을 수신했습니다 .as_view는 이미 클래스의 속성 인 인수 만 허용합니다."

클래스 기반 뷰에서 뭔가 빠졌거나 ActivationView를 서브 클래 싱하고 사용자 정의 로직을 넣는 것이 가장 좋습니다.

답변

1

실제로 기존 속성을 as_view()으로 전달할 수 있습니다. 따라서 source of django-registration을 보면보기에 success_url 속성이 없지만 self.get_success_url(...)을 호출하여 값을 가져옵니다.

기본적으로이 방법은 구현되어 있지 않으므로 ActivationView의 하위 클래스를 지정하고 get_success_url을 직접 구현하는 것 외에는 선택의 여지가 거의 없습니다.

+0

가 나는 경우 패키지가 더 나은 설계 될 것이라고 생각 'ActivationView' 클래스는 편집 CBV에서 발견 된 것과 비슷한'get_success_url'의 기본 구현을 포함하고'success_url = None' 선언과 함께'as_view '에 대한 키워드는 작동하지만 그렇지 않습니다. –

+0

확인해 주셔서 감사합니다. 나중에 다른 사람들을 위해 ActivationView를 서브 클래 싱하는 예제를 추가하겠습니다. – lightstrike

1

보기를 서브 클래스 화하고 get_success_url 메서드를 재정의해야한다고 생각합니다.

pull request 57을 열어 success_url을 클래스 속성으로 설정할 수 있지만 아직 병합되지 않았습니다.

""" 
views.py 
"""  

from registration.views import ActivationView 

class CustomActivation(ActivationView):       
    def activate(self, request, *args, **kwargs):     
     return True 

    def get_success_url(self, request, user): 
     success_url = # insert success URL here 
     return success_url 

그것은 당신의 urls.py 파일에 올바른 URL을 설정하는 것도 중요 : 다른 사람이 확인 된

+0

해명 해 주셔서 감사합니다. 당겨 받기 요청이 승인 되길 바랍니다. 확실히이 문제가 해결 될 것 같습니다. – lightstrike

0

, 나는() 메소드 ActivationView를 서브 클래 싱하고 get_success_url을 (재정 의하여이 문제를 해결)하고 활성화 할 수 있었다 django-registration에 의해 호출 될 기본 ActivationView를 오버라이드한다. 기억하는 한 특질은 장고 등록이 auth.urls의 파일 경로 및에 따라 그 URL을 설정하는 것입니다하지 앱의 urls.py 파일에 지정된 값 :

""" 
urls.py 
""" 

from yourapp.views import CustomActivation 

urlpatterns += patterns('', 
    url(r'^user_settings/', include('auth.urls')), 
    url(r'^user_settings/activate/(?P<activation_key>\w+)/$', 
     CustomActivation.as_view(), 
     name='registration_activate', 
     ), 
    # will still set registration URLs under user_settings! 
    url(r'^accounts/', include('registration.backends.default.urls')), 
)