【问题标题】:Closing a django admin add related object popup window on save关闭 django 管理员在保存时添加相关对象弹出窗口
【发布时间】:2009-10-09 22:35:31
【问题描述】:

在 django 管理员中,当用户成功保存(在我的 clean 方法之后)在弹出窗口中编辑的新的或更改的相关对象时,我希望关闭弹出窗口而不是转到不同的视图。

我相信我可以使用 response_change 或 response_add 让它转到不同的视图,但有没有办法让我关闭窗口?

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    看看原来的response_changeresponse_add方法做了什么:它们返回一段javascript,在父窗口中调用一个JS方法,关闭弹出窗口。

    return HttpResponse('''
       <script type="text/javascript">
          opener.dismissAddAnotherPopup(window);
       </script>'''
    

    在父窗口中,有一个具有相关方法的脚本:

    function dismissAddAnotherPopup(win) {
        win.close();
    }
    

    (原来的版本传递了更多的参数,所以它用新对象更新父窗口,但如果你只是想关闭窗口,则不需要。)

    【讨论】:

      【解决方案2】:

      Daniel 提供的解决方案存在潜在错误,请参阅此 Django ticket。也就是说,如果您使用的是application/xhtml,那么如果您只返回脚本,窗口将不会关闭。这个错误已经在 Django 中得到修复。

      更好的方法是添加&lt;!DOCTYPE html&gt; 标签,例如当前的Django source

      '<!DOCTYPE html><html><head><title></title></head><body>'
      '<script type="text/javascript">opener.dismissAddAnotherPopup(window, "%s", "%s");</script></body></html>' % \
      # escape() calls force_unicode.
      (escape(pk_value), escapejs(obj)))
      

      【讨论】:

        猜你喜欢
        • 2020-11-22
        • 2016-01-16
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 2016-09-23
        • 1970-01-01
        相关资源
        最近更新 更多