代码之家  ›  专栏  ›  技术社区  ›  juju

使用django,当调用视图函数时,如何在视图中静默提交表单而不返回http响应,从而不重新加载网页

  •  0
  • juju  · 技术社区  · 7 年前

    如何通过单击按钮调用我的视图函数,并让它返回一些可能导致网页无法重新加载的内容?似乎我必须以某种方式在views.py中返回一个http请求,否则我会得到一个错误。”我不想停止提交表格”。我现在不想使用ajax。 我有一个页面,其中有一个长长的数据库对象列表,用户可以输入数量,然后单击一个按钮,将表单数据发送到购物车对象。执行此操作时,会触发相应的view函数并返回某种http响应,从而以某种方式加载页面。我希望在单击按钮时,除了提交表单数据之外,不会发生任何事情。甚至没有重定向到同一页。这是因为我不想让用户失去页面上的位置,而必须在对象列表中滚动才能找到它们的位置。

    意见

    def add_to_cart(request, product_id):
        return HttpResponse('')
    

    url路径

        path('cart/add/<product_id>', home_views.add_to_cart, name='add_to_cart'),
    

    引用

    <form action="{% url 'add_to_cart' product.id %}" method="post">{% csrf_token %}</form>
    
    3 回复  |  直到 7 年前
        1
  •  1
  •   AKX Bryan Oakley    7 年前

    如果您真的不想使用ajax、重新加载页面或在页面中反映文章所做的任何更改,可以添加一个隐藏的 <iframe> 你设置为表单的目标。

    <iframe name="submit-frame" style="display: none"></iframe>
    

    <form target="submit-frame">...</form>
    
        2
  •  0
  •   Hayden    7 年前

    这种效果不是由Django支持的_1产生的;您可以通过AJAX请求发布表单数据来产生此结果

        3
  •  0
  •   ThatCampbellKid    7 年前

    您可以尝试在按钮单击时调用post(),如下所示:

    function post() {
        $.ajax({
            type : 'POST',
            url : 'post/',  //whatever relative url you want to use
            data : { msgbox : $('#input-id').val() }, //the input id of what you are submitting
    
            success : function(json){ //do stuff if post is successful
                $('#chat-msg').val(''); //can set the to blank
            }
         });
    }
    

    只需将其添加到javascript或脚本标记中,但您将需要添加jquery,如下所述:

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    
    推荐文章