我想将 success_url 传递给Django注册中基于类的ActivationView,例如基于函数的视图的this answer封面和RegistrationView的this answer封面。到目前为止我尝试过的是不成功的:
url(r'^activate/(?P<activation_key>\w+)/$',
ActivationView.as_view({'success_url':'/activation_routing'}),
name='registration_activate',
),
返回“TypeError:as_view()只需1个参数(给定2个)”我也试过
和
url(r'^activate/(?P<activation_key>\w+)/$',
ActivationView.as_view(success_url='/activation_routing'),
name='registration_activate',
),
返回“TypeError:ActivationView()收到无效关键字'success_url'.as_view只接受已经是该类属性的参数。”
我觉得我错过了基于类的视图,或者是继承ActivationView并将自定义逻辑放入最佳选择?
答案 0 :(得分:1)
您确实只能将现有属性传递给as_view()
。因此,查看source of django-registration,视图没有success_url
属性,但通过调用self.get_success_url(...)
获取其值。
默认情况下,此方法未实现,因此除了子类化ActivationView
和自己实现get_success_url
之外别无选择。
答案 1 :(得分:1)
我认为你必须对视图进行子类化并覆盖get_success_url
方法。
我打开pull request 57以启用将success_url
设置为类属性,但尚未合并。
答案 2 :(得分:0)
正如其他人所证实,我能够通过继承ActivationView并重写get_success_url()和activate()方法来解决这个问题:
"""
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以覆盖将由django-registration调用的默认ActivationView也很重要。需要记住的一个怪癖是,django-registration将根据auth.urls的文件路径设置其URL,而不是您在应用程序的urls.py文件中指定的URL:
"""
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')),
)