是否可以在不重新加载页面的情况下更新 django 上下文字典?
Posted
技术标签:
【中文标题】是否可以在不重新加载页面的情况下更新 django 上下文字典?【英文标题】:Is it possible to update a django context dictionary without reloading the page? 【发布时间】:2018-08-15 01:59:04 【问题描述】:我正在尝试使用 AJAX 更新 Django 上下文字典,以便在单击某个按钮时它可以在网页上显示不同的分配。我的视图基于用于请求页面的 GET 或 POST 方法创建不同的上下文字典。前者是默认设置,后者在用户单击按钮时发生。一切正常,AJAX 发送正确的数据,视图能够找到正确的对应分配。然而,我的问题是页面内容(django 模板代码)永远不会随着响应而改变更新。我做错了什么?
@login_required
def assignments(request):
terms = Course.objects.filter(students = request.user).values('term__season', 'term__year').distinct()
courses = Course.objects.filter(students = request.user)
assignments = Assignment.objects.filter(course__in=courses)
if request.method == 'POST':
# retrive ajax data
data = request.POST
course_subject = data['course_subject']
course_number = data['course_number']
course_section = data['course_section']
term_season = data['term_season']
term_year = data['term_year']
# get the associated course for the click
course = Course.objects.filter(subject = course_subject,
number = course_number,
section = course_section,
term__year = term_year,
term__season = term_season)
# get the assignments associated with that course
assignments = Assignment.objects.filter(course = course)
context_dict =
'assignments': assignments,
'courses': courses,
'terms': terms,
return render(request, 'mainapp/assignments.html', context_dict)
【问题讨论】:
【参考方案1】:页面本身不会神奇地“重绘”。您应该重新加载它(进行真实表单提交)或使用 javascript 修改页面内容。我建议将您的功能拆分为 2 个视图。第一个将呈现页面的初始状态,第二个将处理 Ajax 请求。 Ajax 处理视图可以呈现 HTML(您可以直接在页面上插入)或 JSON(然后您需要在客户端实现实际的 HTML 呈现)。
【讨论】:
那么在 AJAX 视图中我不能简单地提供一个新的上下文字典吗? 上下文只存在于视图内部。因此,当您发出请求并执行时,视图上下文是相关的。在呈现模板并将响应发送到客户端后,您的上下文不存在并且 Django(或任何其他服务器端代码)无法对页面执行任何操作。您只能在客户端使用 Javascript 修改您的页面或重新加载它(这将触发对服务器的新请求,您的视图将再次执行并且会有新的上下文)。以上是关于是否可以在不重新加载页面的情况下更新 django 上下文字典?的主要内容,如果未能解决你的问题,请参考以下文章
Django:如何在不重新加载的情况下在页面上显示更新的信息
Django - 如何在不刷新页面的情况下保持在同一页面上?