【问题标题】:Django: send data to server without rendering new templateDjango:将数据发送到服务器而不呈现新模板
【发布时间】:2014-03-04 01:16:42
【问题描述】:

我正在使用 Django 创建一个网站,我希望用户能够按下一个按钮,该按钮将向我的服务器发送一些数据,例如通过 HTTP 发布请求向数据库添加一个条目。我可以通过创建一个 HTML 表单来做到这一点,并在 action 属性中,指向一个将进行数据处理的视图,然后呈现一个模板。

但是,如果我不想渲染模板怎么办?如果我想让用户点击按钮来处理服务器上的一些数据,但是我不想通过视图函数渲染一个新的模板,怎么做呢?我想在浏览器中维护当前呈现的 HTML,但我知道向服务器发送数据的唯一方法是在视图函数中呈现新模板。

有什么帮助吗?谢谢。

【问题讨论】:

    标签: django


    【解决方案1】:

    只需从您的角度返回204 No Content 答案即可。

    【讨论】:

    • Karnivaurus,这是您视图响应的另一种完全合法的方式。这仅取决于您的用例。 @neoascetic,答案也很好。
    【解决方案2】:

    在 Django 中没有说视图必须渲染模板。这只是视图可以做的许多事情之一。一个视图只需要返回一个HttpResponse

    HttpResponse 正文是否包含 HTML 等,完全取决于您。您也不需要表单来将数据发布到您的服务器。您只需使用 JavaScript 即可发送所需的任意数据。您仍然可以使用输入、文本区域等表单元素;它们不必包含在表单元素中才有效。

    为了简短回答,您需要使用 JavaScript 通过 ajax 将数据发送到您的 Django 应用程序,处理数据,并返回 JSON 或 XML 格式的响应,然后您可以使用它来更新您的页面等. 你可以编写 vanilla JavaScript 来做到这一点,或者利用像 jQuery 这样的库,或者如果你真的非常懒惰,你可以使用像 Dajax 这样的东西。

    【讨论】:

      【解决方案3】:

      正如我在之前的回答中所说,在 Django 中执行此操作的正常方法是发布到相同的视图,该视图接受数据,然后重新呈现相同的模板(例如显示错误)或重定向到另一个网址。

      另一种方法是使用 Ajax 发布帖子。

      【讨论】:

      • 谢谢 - 重新呈现完全相同的页面是否比返回 204 No Content 响应更可取?例如,如果网页上有很多图像,那么简单地从服务器重新加载它们似乎效率低下。
      【解决方案4】:

      您可以通过向您的服务器发送 ajax 请求来实现此目的。
      在这里你需要编写一个ajax请求,它将执行django视图并将响应返回为json、xml格式。
      您可以根据需要在模板中显示最新数据。
      Ajax 请求

      功能邮件检查(){ var val = $("#val").val(); $.getJSON('/test/'+val+"/", 功能(数据){ // 渲染改变内容 });}

      Django 视图

      def checkemailavailability(请求,验证): 消息 = {'结果':''} 如果 request.is_ajax(): # 把逻辑放在这里 #json = simplejson.dumps() 将数据转成json 返回 HttpResponse(json, mimetype='application/json')

      注意:不要忘记包含jquery
      链接:stackoverflowtangowith djangobradmontgomery.net

      【讨论】:

        猜你喜欢
        • 2017-04-10
        • 2018-03-18
        • 1970-01-01
        • 2020-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多