我有一个按钮,可以将用户上传文件中的数据以特定格式复制到剪贴板。我已经将这些数据保存在数据库中,因为它们是以单独的文件形式上载的。我目前拥有它,因此单击copy to clipboard按钮后,它将链接到我的copy_data中的views.py视图,该视图需要HTTP请求,该请求将重定向到包含copy to clipboard按钮的当前模板,如下所示:

HttpResponseRedirect('previous/template/here')

除了它链接到我的copy_data视图(然后重定向到包含按钮的原始视图)外,它可以重新加载整个页面,因此效果很好。

我认为更好的解决方案是将python函数直接绑定到按钮单击,而不用担心从一个视图重定向到另一个视图。

我已经找到了许多使用ajax的示例,但是还没有找到适合我的用例的示例。我尝试将click事件绑定到按钮没有任何问题,但是我一直想弄清楚如何通过click绑定python函数。

按下按钮后,如何在Django模板中绑定python函数?

最佳答案

很难确定,但是我认为您在这里混用了同步/异步范式。当使用Ajax生成请求时,您(通常)不想返回重定向,而是想要返回数据。可能是JSON数据,也可能是格式化为特定MIME类型甚至是文本的数据。这可能是一个较高层次的方法:

def copy_data(request):
    # get posted data
    submitted = request.POST
    # do whatever is necessary to create document
    data = ???
    # first, we'll need a response
    resp = HttpResponse()
    # set the content type, if needed
    resp.content_type = 'text/???; charset=utf-8'
    # response has a file-like interface
    resp.write(data)
    return resp


显然,这需要根据您的目的进行工作,但这是高级方法。

听起来好像没有返回JSON,但是如果需要的话,现在有一个特殊的响应对象。

10-06 14:26