如何修改django-allauth中AddEmailForm的成功跳转URL?
如何修改django-allauth中AddEmailForm的成功跳转URL?
嗨,我来帮你搞定这个跳转问题~你现在遇到的是django-allauth默认跳转的问题,其实有几种简单的方法可以让提交表单后回到你的UserDetail页面,我给你详细说说:
方法一:在表单里添加next隐藏字段(最快实现)
allauth支持通过next参数指定跳转目标,你只需要在你的表单里加一个隐藏输入框,把当前UserDetail页面的URL传进去就行。修改你的模板代码:
<form method="post" action="{% url 'account_email' %}" class="add_email mt-2"> {% csrf_token %} {{ form_add_mail|crispy }} <!-- 添加这个隐藏字段 --> <input type="hidden" name="next" value="{{ request.path }}"> <div class="flex justify-end mt-2"> <button type="submit" name="action_add" class="bg-green-600 hover:bg-green-800 dark:bg-green-600 dark:hover:bg-green-800 font-semibold text-white rounded-sm p-2 text-xs sm:text-sm sm:px-8 "> {% translate "Add E-mail" %} </button> </div> </form>
如果想更精准(比如避免request.path可能带的额外参数),也可以用你的UserDetail页面的URL反向解析:
<input type="hidden" name="next" value="{% url 'user_detail' username=request.user.username %}">
这里要注意把user_detail换成你实际配置的UserDetailView的URL名称哦。
方法二:自定义AddEmail视图(更灵活的全局控制)
如果希望所有添加邮箱的操作都跳转到用户详情页,或者需要做更多自定义逻辑,可以重写allauth的AddEmailView:
- 首先在你的
views.py里创建自定义视图:
from allauth.account.views import AddEmailView from django.urls import reverse class CustomAddEmailView(AddEmailView): def get_success_url(self): # 跳转到当前用户的详情页 return reverse('user_detail', kwargs={'username': self.request.user.username})
- 然后在你的
urls.py里替换原来的allauth的account_email路由:
from django.urls import path from .views import CustomAddEmailView urlpatterns = [ # 替换默认的account_email路由 path('accounts/email/', CustomAddEmailView.as_view(), name='account_email'), # 你的其他路由... path('users/<str:username>/', UserDetailView.as_view(), name='user_detail'), ]
这样不管从哪个页面提交AddEmailForm,成功后都会跳转到用户自己的详情页啦。
方法三:全局配置(最简单的全局设置)
如果你的项目里所有添加邮箱的操作都需要跳转到同一个地方,也可以直接在settings.py里配置:
ACCOUNT_EMAIL_REDIRECT_URL = '/users/{username}/'
allauth会自动把{username}替换成当前用户的用户名,不过这个是全局生效的,适合所有场景都需要统一跳转的情况。
你可以根据自己的需求选其中一种方法,第一种最适合你当前的场景,改改模板就能生效~
备注:内容来源于stack exchange,提问作者JAdel
相关产品推荐
相关产品推荐

