【问题标题】:Django - Pass data from javascript to view & redirect to a new urlDjango - 从 javascript 传递数据以查看并重定向到新的 url
【发布时间】:2021-05-27 16:12:21
【问题描述】:

在我的网页上有 2 个按钮 - A 和 B。我想捕获用户在前端单击的按钮并将其发送回服务器,以便我可以为用户生成适当的令牌。然后将用户重定向到正确的网址 - “/A”或“/B”,具体取决于他们点击的内容。

urls.py

    path('buttonTest/', buttonView), # Initially testing with one url

Views.py

def buttonView(requests):
    if requests.method == 'POST':
        clicked_button_val = requests.POST.get('clicked_button')
        # generate auth token
        render(requests, 'test.html')

test.html

<form id="testform">
    <button name="subject" id="A" type="submit" value="A">A</button>
    <button name="subject" id="B" type="submit" value="B">B</button>
</form>
<script>
$("button").click(function() {
    $.ajax({
        type: "POST",
        data: { 
            "clicked_button": $(this).val(),
        },
        success: function(result) {
            alert('ok');
        },
        error: function(result) {
            alert('error');
        }
    });
});
</script>

我能够成功地将数据从前端传递到视图。但 url 不会重定向到 /buttonTest。如果我像这样在 html 中添加重定向,

<button name="subject" id="A" type="submit" value="A" onclick="location.href='/buttonTest'">A</button>

然后views.py中的请求变成了一个GET请求并且无法访问用户点击的内容。

我想要做的是捕获用户通过 POST 请求单击的按钮,然后将用户重定向到新的 url 并将 POST 请求中捕获的数据传递到新的 url 和视图。

【问题讨论】:

    标签: javascript django view


    【解决方案1】:

    很可能你的 ajax 请求甚至没有被使用,因为你的按钮有 type="submit" 并且你永远不会阻止表单提交。最简单的方法是使用 JavaScript 在按钮和放弃上设置不同的 name 属性:

    <form id="testform">
        <button name="submit_A" id="A" type="submit" value="A">A</button>
        <button name="submit_B" id="B" type="submit" value="B">B</button>
    </form>
    

    现在在视图中:

    def buttonView(request): # request should be singular(naming convention)!!
        if request.method == 'POST':
            if 'submit_A' in requests.POST:
                # generate auth token for button A and redirect
            elif 'submit_B' in requests.POST:
                # generate auth token for button B and redirect
            render(requests, 'test.html')
    

    【讨论】:

    • 问题是如何将数据重定向到新的 url?同样,这是一个简化的示例。我有超过 2 个按钮。
    • @Piyush redirect 与数据?您不会使用数据重定向。如果您需要这样做,那么您应该发布到其他 url 而不是重定向到它(假设您在表单中除了提交按钮之外还有其他任何内容)。请说明你到底想要什么。
    • 这就是我想要的 - 从客户端获取表单数据到服务器,然后使用收集的数据将用户重定向到新的 url
    • @Piyush 检查 Iain Shelvington 的回答。正如我们俩所说,您不会使用数据进行重定向。他的回答似乎最适合您的需要。
    【解决方案2】:

    您不能在重定向中包含数据,因为重定向会触发 GET 请求。

    但是,您可以添加 formaction 属性来提交输入以将相同的表单提交到不同的 URL

    <input type="submit" formaction="/handle-a/" value="A">
    <input type="submit" formaction="/handle-b/" value="B">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-01
      • 1970-01-01
      • 2014-08-28
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      • 2012-10-30
      • 1970-01-01
      相关资源
      最近更新 更多