2014-10-12 44 views
1

我想在Django的同一页上呈现两个表单(注册和登录)。我想通过更改<form action="some_url"标记将数据发布到任一字段。这是这个答案中的第一个建议:https://stackoverflow.com/a/1395866/2532070是否可以发布到不同的Django视图?

这可能吗?目前,我有:

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,而不是调用SignupUser视图。

是否可以通过正确格式化我的表单的action="..."标签来调用SignupUser视图和POST数据?

+0

当然,这是可能的:这只是标准的HTML行为。你可以检查(通过查看源代码)动作属性正确填充? – 2014-10-12 12:34:26

+0

谢谢丹尼尔!它加载为action =“/ signup /” – YPCrumble 2014-10-12 12:36:48

回答

1

问题不在于你认为它的地方。

问题是,您的初始URL,指向HomePageView,捕获一切,因为您不指定字符串的结尾。你有一个开始锚,^,但不是一个结束锚,这意味着它基本上匹配“开始的每一个字符串”,即一切。

你只需要匹配空字符串:

url(r'^$', HomePageView.as_view()), 
相关问题