是否可以在不重新加载页面的情况下更新 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:如何在不刷新页面的情况下更新图像?

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

我可以在不重新加载浏览器的情况下编辑 React 组件吗?

在不使用 jQuery 重新加载页面的情况下将 Flask 输入更新为 HTML [重复]

我们如何在不重新加载页面的情况下使用 javascript/jQuery 更新 URL 或查询字符串?