Django - 如何在不刷新页面的情况下保持在同一页面上?

Posted

技术标签:

【中文标题】Django - 如何在不刷新页面的情况下保持在同一页面上?【英文标题】:Django - How to stay on the same page without refreshing page? 【发布时间】:2016-06-20 22:34:21 【问题描述】:

我正在使用 Boostrap 模态淡入淡出窗口呈现 Django 表单来更新我的数据库记录。如果用户打开了更新窗口并且没有更改任何内容,我没有做的是不重新加载页面。如果你看下面的代码会更容易理解我的想法:

def updateTask(request, task_id):
    #cur_usr_sale_point = PersonUnique.objects.filter(employees__employeeuser__auth_user = request.user.id).values_list('agreementemployees__agreement_unique__sale_point_id',flat=True)
    selected_task = Tasks.objects.get(id=task_id)    
    task_form = TaskForm(instance=selected_task )
    taskTable = Tasks.objects.all()
    if request.method == 'POST':
        task_form = TaskForm(request.POST,instance=selected_task)
        if task_form.has_changed():
            if task_form.is_valid():
                # inside your model instance add each field with the wanted value for it
                task_form.save();
                return HttpResponseRedirect('/task_list/')   
        else: # The user did not change any data but I still tell Django to                 
              #reload my page, thus wasting my time.
             return HttpResponseRedirect('/task_list/') 
    return render_to_response('task_management/task_list.html','createTask_form':task_form, 'task_id': task_id, 'taskTable': taskTable,context_instance=RequestContext(request))

问题是,有什么方法可以告诉 Django 更改 url(就像重定向后发生的那样),但不要第二次加载具有相同数据的同一页面?

【问题讨论】:

不,我不这么认为。一旦request 被发送到 Django,它必须返回一个response。您可以在单击按钮时使用一些 AJAX 来执行此操作。编写一个 AJAX 方法,检查当前表单数据是否与保存的数据不同。仅当为真时,才提交完整的表单。 @DanRussell,您能否在回答问题时提供此 JQuery-Ajax 函数结构的最短示例?我对 Ajax 的经验很少,即使我知道理论,但我不知道这在实践中应该是什么样子。我会感激甚至朝着正确的方向踢一脚 【参考方案1】:

这不是微不足道的,但您需要的基本步骤是:

    编写一些javascript来篡夺表单提交按钮的点击 调用将数据发送到“检查”视图的 ajax 函数 编写一个“检查”视图来检查表单数据是否已更改 如果数据有变化,请提交表单 如果没有,请留在页面上

This blog post 很好地介绍了整个过程(尽管针对不同的最终结果,但您需要修改视图)。

这里有一些对上述步骤有帮助的答案:

    基本上:

    $('#your-form-id').on('submit', function(event)
        event.preventDefault();
        your_ajax_function();
    );
    

    Call ajax function on form submit

    自己动手吧! Submit form after checking

【讨论】:

以上是关于Django - 如何在不刷新页面的情况下保持在同一页面上?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Django、Ajax、jQuery 在不刷新页面的情况下提交表单?

如何在不刷新页面的情况下使用 django-crispy-forms 实现引导模式表单

是否可以在不刷新整个页面的情况下刷新包含的 Django 模板?

Vuex:在不编写 itvuex 的情况下在页面刷新时保持状态?

如何在不刷新的情况下增加订单详细信息的数量

如何在不刷新整个页面的情况下重新加载组件?