是否可以POST到不同的Django视图?

时间:2014-10-12 12:25:35

标签: django

我正在尝试在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视图?

1 个答案:

答案 0 :(得分:1)

问题不在你想象的地方。

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

您只需匹配空字符串:

url(r'^$', HomePageView.as_view()),