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 模板?