【问题标题】:Django - save data on submit but not reload viewDjango - 在提交时保存数据但不重新加载视图
【发布时间】:2013-02-04 16:40:31
【问题描述】:

我有一个视图,它显示了一个可以使用提交按钮保存的表单。我不希望在提交表单时重新加载视图。但是,如果函数不返回响应,我会遇到错误。

view.py

from django.shortcuts import render_to_response
from ezmapping.models import *
from django.forms.models import modelformset_factory

def setAppOptions(request, map_name):
    if request.user.is_authenticated():
        app_selected = EzApp.objects.get(app_name=app_name, created_by=request.user)
        formset = ezAppOptionFormSet(user=request.user, instance=app_selected)
        if request.method == 'POST':
            formset = ezAppOptionFormSet(request.POST, instance=app_selected, user=request.user)
            if formset.is_valid():
                formset.save()

        return render_to_response("manage_app_options.html", {'formset': formset}, context_instance=RequestContext(request)) 
    else:
        error_msg = u"You are not logged in"
        return HttpResponseServerError(error_msg)

【问题讨论】:

    标签: django


    【解决方案1】:

    除非您通过 ajax 发布表单,否则您将无法在不重新呈现模板的情况下执行 POST。如果您通过 ajax 提交表单并返回 JSON、XML 等响应,则您可以使用表单错误或其他信息更新模板。

    但是,鉴于您视图中概述的用例,我建议使用 @login_required decorator 完全限制对视图的访问。如果这样做,您的视图逻辑可以大大简化。

    【讨论】:

    • 好的,谢谢。那么,是否可以在重新加载页面时保持 css 状态。示例:记住字段集在提交之前是否折叠或显示
    • 当然。有几种方法可以做到这一点。一种是将展开/折叠的值保存在随表单发布的隐藏字段中,或者您可以使用 JavaScript 并将值保存在 cookie 中。然后,您可以在页面重新加载时选择备份的值并切换您的字段集。
    • 您是否建议使用 AJAX 发布数据而不重新加载或使用 cookie?我的目标是在发布后记住切换的 fielset。
    • 我会用一个 Ajax 调用来做所有事情。如果您真的,真的想在您离开并返回此页面时记住您的字段集的切换状态,我很可能会通过 JavaScript 将它们存储在 cookie 中。如果您需要快速开始 ajax 帖子 + 错误处理等,请查看:djangosnippets.org/snippets/2393
    猜你喜欢
    • 2015-08-11
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多