【问题标题】:Django - How to stay on the same page without refreshing page?Django - 如何在不刷新页面的情况下保持在同一页面上?
【发布时间】: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 的经验很少,即使我知道理论,但我不知道这在实践中应该是什么样子。我会感激甚至朝着正确的方向踢一脚

标签: django


【解决方案1】:

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

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

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

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

  1. 基本上:

    $('#your-form-id').on('submit', function(event){
        event.preventDefault();
        your_ajax_function();
    });
    
  2. Call ajax function on form submit

  3. 自己动手吧!
  4. Submit form after checking

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 2017-05-11
    • 2011-06-15
    • 2020-02-12
    相关资源
    最近更新 更多