【问题标题】:How to catch a Django "GET" event in template using jquery?如何使用 jquery 在模板中捕获 Django“GET”事件?
【发布时间】:2021-03-09 13:54:23
【问题描述】:

在我的 Django 项目中,我有一个生成报告的 pdf 下载按钮。当我按下按钮时,我想要一个显示正在处理报告的模式。下载pdf后,我希望模态自动隐藏。

但是,我在最后一部分遇到了一些问题。我知道 Django 在下载报告时会在后端发送“GET”消息(“GET /download/140/...”)

如何在我的模板中“捕捉” ("GET /download/140/...") 事件?

代码:

<a href="{% url 'report-download' object.id %}" class="btn btn-grey" id="pdf-button"></a>

启动下载时显示“处理”模式...

<script type="text/javascript">
$("#pdf-button").on("click", function(){
    $('#myPDFModal').modal('show');
});
</script>

尝试:使用 Ajax 完成下载后关闭“处理”模式...

<script type="text/javascript">
$(document).on('click', '#pdf-button', function(event)
{
    event.preventDefault();
    $.ajax({
        url: '{% url 'report-download' object.id %}',
        type: 'GET',
    }).done(function(result) {
        $('#myPDFModal').modal('hide');
    });
});
</script>

上面的代码似乎可以在正确的“GET”事件中显示/隐藏模式,但是没有下载 pdf..

【问题讨论】:

    标签: jquery django ajax


    【解决方案1】:

    您可以将downloadtarget="_blank" 添加到您的pdf 链接中。

    <a 
        href="{% url 'report-download' object.id %}" 
        class="btn btn-grey" 
        id="pdf-button"
        download="SuggestedFilename.pdf"
        target="_blank"
    ></a>
    

    这将允许文件出现在下载中,而不会弄乱页面位置(这是我对您要完成的工作的理解)。

    接下来,在 onclick 处理程序中删除 event.preventDefault() - 这将使链接再次工作。并且不再需要 .ajax 调用。所以剩下的就只有.modal('hide')

    <script type="text/javascript">
    $(document).on('click', '#pdf-button', function(event) {
        $('#myPDFModal').modal('hide');
    });
    </script>
    

    在那些 GET 消息上 - 那是你的服务器的日志。没有办法(出于安全性等原因)从前端访问它。如果您发起了请求,您只能等待来自服务器的回复(这就是您对 ajax 调用的 .done(...) 部分所做的事情)。

    如果您坚持进行“类似 ajax”的下载,请参阅此答案:Download a file by jQuery.Ajax

    【讨论】:

    • 感谢您的回答。其实我只是想在下载完成后关闭模态框。我不在乎它是 Ajax 还是 Javascript。我尝试了您的解决方案,但 .modal('hide') 在我按下下载按钮后立即启动。我想要的是在下载完成后启动 .modal('hide') 。
    • 我明白了,您是否尝试过我链接的答案中的示例? (您应该用 fetch(...).then(...) 替换您的 $.ajax(...) 并隐藏模式以代替 alert(...)
    猜你喜欢
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 2020-09-08
    相关资源
    最近更新 更多