【问题标题】:How to call a specific python function from within a Django template如何从 Django 模板中调用特定的 python 函数
【发布时间】:2015-01-16 22:22:11
【问题描述】:

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

HttpResponseRedirect('previous/template/here')

这很好用,除了因为它链接到我的copy_data 视图,然后重定向到包含按钮的原始视图,它会重新加载整个页面,这是不可取的。

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

我找到了许多使用 ajax 的示例,但没有找到适合我的用例的示例。我尝试将单击事件绑定到按钮没有任何问题,但我一直在弄清楚如何将 python 函数与单击绑定。

如何在按下按钮时在我的 Django 模板中绑定 python 函数?

【问题讨论】:

  • 我不是 100% 确定你在问什么。浏览器不会执行任意 python 代码——你不能像 javascript 那样将 python 放入模板中。您可以将数据异步发送到服务器,然后它可以通过 python 代码运行,但这是一个 Ajax 调用,您说这不是您想要的。但是,如果不使用 Ajax,我想不出没有刷新/整页加载的方法。
  • 但是,如果我只想执行 python 脚本,将数据库中已经存在的数据复制到剪贴板,我将通过 Ajax 发送哪些数据?我想我可以在单击事件时发送一个标志,Django 视图将其解释为复制到剪贴板。
  • 您的服务器端 python 代码将无法写入客户端的剪贴板。它可以从数据库中获取数据,对其进行处理,然后将处理后的数据发送到客户端。数据从服务器传递到客户端后,您可以在客户端使用 javascript 访问用户的剪贴板(存在安全问题,请参见此处:stackoverflow.com/questions/400212/…)。本地运行的 python 脚本可以直接访问剪贴板,但它不会通过服务器/客户端架构那样工作。

标签: javascript jquery python ajax django


【解决方案1】:

很难确定,但我认为您在这里混合了同步/异步范式。当您使用 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,但如果您需要,现在有一个特殊的响应对象。

【讨论】:

  • 在仔细考虑之后,我意识到我的问题离我的目标很远,所以我更新了它。不过感谢您的回答。
  • @aus_lacy 我认为您可能不完全理解服务器和浏览器之间的关注点分离。 Ajax 不知道也不关心它正在与 Django 对话,反之亦然。诀窍是通过使用常见的请求/响应模式让他们合作。我的答案可能不完全是你所需要的,但一个可行的解决方案看起来更像我的答案,而不是你似乎要走的路。
猜你喜欢
  • 2011-11-28
  • 2014-09-01
  • 2011-01-08
  • 2013-07-10
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 2023-03-25
相关资源
最近更新 更多