django 要将POST发送到的具有不同目标URL的窗体

zpjtge22  于 2023-02-17  发布在  Go
关注(0)|答案(2)|浏览(137)

我有一个显示表单的视图。现在,根据用户选择的按钮,我希望以不同的方式处理数据。这些“不同的方式”对应于我希望POST请求转到的不同视图。
请帮助我建立一个多个按钮导致不同的网址/视图的形式。

<form action="/your-name/" method="post">
    {% csrf_token %}
    {{ form }}
    <input type="submit" value="Process form with view ONE">
    <input type="submit" value="Process form with view TWO">
    <input type="submit" value="Process form with view THREE">
</form>

这里我的问题是form标记的action属性定义了这个POST请求要去哪里,我怎么能通过多个按钮来改变那个目标url呢?
我知道我也可以在服务器端处理这个逻辑,但问题是:我一定要**吗?如果不是,请给我指条路

jyztefdp

jyztefdp1#

你可以使用带有onclick属性 AJAX 。post_url作为参数,如下所示

<form method="post">
    {% csrf_token %}
    {{ form }}
    <input type="submit" value="Process form with view ONE" onclick='testFun(url_one)'>
    <input type="submit" value="Process form with view TWO" onclick='testFun(url_two)'>
    <input type="submit" value="Process form with view THREE" onclick='testFun(url_three)'>
</form>
z31licg0

z31licg02#

要在frontend上处理这个问题,甚至不使用ajax,您可以使用JavaScript根据提交表单之前单击的按钮来更改表单的action URL。
对HTML代码进行了细微更改

<form method="post" id="my-form">
    {% csrf_token %}
    {{ form }}
    <input type="submit" id="view1" value="Process form with view ONE">
    <input type="submit" id="view2" value="Process form with view TWO">
    <input type="submit" id="view3" value="Process form with view THREE">
</form>

用于根据单击的按钮处理表单重定向的JavaScript

const form = document.getElementById('my-form');
const button1 = document.getElementById('view1');
const button2 = document.getElementById('view2');
const button3 = document.getElementById('view3');

button1.addEventListener('click', () => {
  form.action = '/view1/';
});

button2.addEventListener('click', () => {
  form.action = '/view2/';
});

button3.addEventListener('click', () => {
  form.action = '/view3/';
});

// Submit the form
form.submit();

注意:您可以使用jQuery进行更好的代码优化

相关问题