禁用Javascript时创建确认对话框页面

时间:2012-09-07 06:12:53

标签: javascript django

我正在使用Django,我希望我的用户确认他们确实想要删除某些内容。我正在考虑纯Django解决方案(没有Javascript确认)。 根据我的想法,我可以创建一个包含“是”和“否”按钮的新页面。如果用户按“是”,我的站点将继续并从数据库中删除该对象。 这是不使用Javascript进行删除的正确方法吗?如果你是我,你会如何实现这个功能?

2 个答案:

答案 0 :(得分:5)

我会使用内置DeleteView的Django,它会显示HTTP GET请求的确认页面并执行HTTP POST请求的删除。

文档给出了这个例子:

from django.views.generic.edit import DeleteView
from django.core.urlresolvers import reverse_lazy
from myapp.models import Author

class AuthorDelete(DeleteView):
    model = Author
    success_url = reverse_lazy('author-list')

我建议阅读SingleObjectMixin的文档,该文档解释了如何自定义视图查找要删除的对象的方式(默认是查找名为pk的URL关键字参数),以及TemplateResponseMixin解释了如何自定义所使用的模板(默认为'myapp/author_check_delete.html')。

这只是许多class-based generic views中的一个,它们可以非常快速,轻松地进行基本操作(显示单个模型实例的页面,模型实例列表以及处理编辑,删除等)。实施

如果您希望稍后使用JavaScript增强此功能,您可以随时编写一些不显眼的JS来检测删除确认页面的链接(通过查找类或特定的URL)并添加一个弹出确认对话框的单击处理程序然后在链接的POST属性中向URL发送href请求。当request.is_ajax()True时,您还需要稍微修改视图以返回JSON对象,以便您的JS知道删除是成功还是失败,这可能涉及覆盖其中一个方法继承自DeletionMixin

答案 1 :(得分:4)

听起来不错。我做了几次是创建一个可以在应用程序的任何地方使用的确认模板:

{% extends 'base.html' %}

{% block content %}

    <div class="confirmation-box">
        <p>{{ message }}</p>
        <div>
            <a href="{{ prev_link }}">Cancel</a>
            <form action="{{ action_link }}" method="post">
                <input type="hidden" name="next" value="{{ prev_link }}" />
                <input type="submit" value="Send" />
            </form>
        </div>
    </div>

{% endblock %}

你传递给它:

  • 用户的确认消息(message
  • 您所在页面的网址(prev_link
  • 应该调用以执行操作的网址(action_link

如果用户取消操作,则她/他返回原始页面。

如果用户确认,则prev_link作为隐藏参数传递,因此视图可以在执行操作后将用户重定向到原始页面(尽管这当然是完全可选的)。

这几乎就是你在问题中提出的问题。