我已经寻找解决方案一段时间了,但是我无法理解这个问题。我想要实现的只是在首页上同时拥有allauth登录和注册表单,而不是放在/账户网址下。是否有任何人有相关经验或者能够分享或指导我找到解决方案?非常感谢您的帮助。
我已经寻找解决方案一段时间了,但是我无法理解这个问题。我想要实现的只是在首页上同时拥有allauth登录和注册表单,而不是放在/账户网址下。是否有任何人有相关经验或者能够分享或指导我找到解决方案?非常感谢您的帮助。
首先,我们使用allauth的注册视图创建一个自定义视图
from allauth.accounts.views import SignupView
from allauth.accounts.forms import LoginForm
class CustomSignupView(SignupView):
# here we add some context to the already existing context
def get_context_data(self, **kwargs):
# we get context data from original view
context = super(CustomSignupView,
self).get_context_data(**kwargs)
context['login_form'] = LoginForm() # add form to context
return context
这里不会呈现登录表单的验证错误,因此我们需要创建一个自定义的LoginView,但现在让我们继续前往模板。
<button id="toggleForms">Toggle Forms</button>
<form method='post' action='{% url 'yourviewurl %}' id='signup'>
{% csrf_token %}
{{ form.as_p }}
<input type='submit' value='Sign Up'>
</form>
<form method='post' action='{% url 'loginurl' %}' id='login' hidden="hidden">
{% csrf_token %}
{{ login_form.as_p }}
<input type='submit' value='Log In'>
</form>
添加一些JavaScript来切换这些表单。 这些操作将表单指向不同的方向。 通常我们会使用formsets,但由于All-auth的注册表单不是Form对象,因此这可能是最快的方法。
这些都放在您选择的任何应用程序的views.py中,标记放在定义在settings.py中的模板内,TEMPLATE_DIRS或Django1.8中的Dirs列表中。
以下步骤适用于我:
1. 进入 allauth\account\views 目录
在 loginView 类 中的 get_context_data
函数下添加以下代码,将signup_form 上下文渲染到 ret 中。
ret.update({"signup_url": signup_url,
"site": site,
"redirect_field_name": self.redirect_field_name,
"redirect_field_value": redirect_field_value,
-->"signup_form":get_form_class(app_settings.FORMS, 'signup',SignupForm)<--
})return ret
在您的应用程序views.py中
def homepage(request):
template = 'account/login.html'
context ={}
return render(request, template, context)
您的urls.py
from .views import homepage
path('', homepage, name='home'),
在您的account/login.html中
{% include "account/signup.html" with form=signup_form %}
请查看https://github.com/believeohiozua/django-allauth/blob/master/allauth/account/views.py获取示例代码
如果您对上述存储库感到满意,只需使用以下命令进行安装:
pip install git+https://github.com/believeohiozua/django-allauth.git