我正在尝试在Django的同一页面上呈现两个表单(注册和登录)。我想通过更改<form action="some_url"
标记将数据发布到任一字段。这是这个答案中的第一个建议:https://stackoverflow.com/a/1395866/2532070
这可能吗?目前我有:
urls.py:
url(r'^', HomePageView.as_view()),
url(r'^signup/$', SignupUser.as_view(), name="signup_user"),
views.py:
class HomePageView(View):
template_name = "index.html"
login_form = AuthenticationForm()
signup_form = UserCreationForm()
def get(self, request, *args, **kwargs):
return render(request, self.template_name, {
'login_form': self.login_form,
'signup_form': self.signup_form,
'signup_action': reverse("signup_user")}
)
class SignupUser(CreateView):
model = settings.AUTH_USER_MODEL
form_class = UserCreationForm
我的模板:
<form action="{{ signup_action }}" method="POST">{% csrf_token %}
{{ signup_form }}
<input type="submit" value="Signup">
</form>
不幸的是,POST似乎是在调用HomePageView
的post函数,而不是调用SignupUser
视图。
是否可以通过正确格式化表单的action="..."
标记来使用POST数据调用我的SignupUser视图?
答案 0 :(得分:1)
问题不在你想象的地方。
问题是您的初始URL(指向HomePageView)会捕获所有内容,因为您没有指定字符串的结尾。你有一个起始锚^
,但不是结束锚,这意味着它基本上匹配“每个开始的字符串”,即一切。
您只需匹配空字符串:
url(r'^$', HomePageView.as_view()),