Html 在Django页面上提交表单而不更改url

Html 在Django页面上提交表单而不更改url,html,django,forms,Html,Django,Forms,我在一个基于django的网站上有一个文本区域,显示数据库字段的内容。 我希望能够编辑此字段并将其提交给更新数据库中字段的函数 我知道如何调用views.py中的函数,然后使用render_to_响应将查询结果发送回新网页 总之,如何使用html表单在django/python脚本中寻址函数,而不需要引用其他url 通常建议使用模式,例如: def myview(request, **kwargs): if request.POST: # validate the po

我在一个基于django的网站上有一个文本区域,显示数据库字段的内容。 我希望能够编辑此字段并将其提交给更新数据库中字段的函数

我知道如何调用views.py中的函数,然后使用render_to_响应将查询结果发送回新网页


总之,如何使用html表单在django/python脚本中寻址函数,而不需要引用其他url

通常建议使用模式,例如:

def myview(request, **kwargs):

    if request.POST:
        # validate the post data

        if valid:
            # save and redirect to another url
            return HttpResponseRedirect(...)
        else:
            # render the view with partial data/error message


    if request.GET:
        # render the view

        return render_to_response(...)      
使用AJAX:

1) 创建用于处理表单提交的视图:

def my_ajax_form_submission_view(request):
    if request.method == 'POST':
        form = MyForm(request.POST)
        if form.is_valid():
           # save data or whatever other action you want to take
           resp = {'success': True}
        else:
           resp = {'success': False}

        return HttpResponse(simplejson.dumps(resp), mimetype='application/json')

    else:
        return HttpResponseBadRequest()
然后,将视图绑定到您的URL模式中

2) 通过AJAX提交表单(使用jQuery):


这是最基本的。您可以而且应该提供更详细的返回响应、错误处理、表单验证/检查等。

这是我一直使用的标准视图代码模式

def payment_details(request, obj_id):
    yourobj = get_object_or_404(Obj, pk=obj_id)
    form = TheForm(instance=yourobj)

    if request.method == 'POST':
        form = TheForm(request.POST, instance=yourobj)
        if form.is_valid():
            yourobj = form.save()
            messages.success(request, 'Yourobj is saved!')
            url = reverse('SOMEURL')
            return redirect(url)

    template = 'SOMETEMPLATE'
    template_vars = {'TEMPLATEVARS': TEMPLATEVARS}
    return render(request, template, template_vars)
在观看了DjangoCon的视频后,可以像这样重新编写上述视图:

def payment_details(request, obj_id):
    yourobj = get_object_or_404(Obj, pk=obj_id)
    form = TheForm(request.POST or NONE, instance=yourobj)

    if request.method == 'POST' and form.is_valid():
        yourobj = form.save()
        messages.success(request, 'Yourobj is saved!')
        url = reverse('SOMEURL')
        return redirect(url)

    template = 'SOMETEMPLATE'
    template_vars = {'TEMPLATEVARS': TEMPLATEVARS}
    return render(request, template, template_vars)
对——但是如果POST无效,您需要确保使用部分数据重新呈现视图。
def payment_details(request, obj_id):
    yourobj = get_object_or_404(Obj, pk=obj_id)
    form = TheForm(request.POST or NONE, instance=yourobj)

    if request.method == 'POST' and form.is_valid():
        yourobj = form.save()
        messages.success(request, 'Yourobj is saved!')
        url = reverse('SOMEURL')
        return redirect(url)

    template = 'SOMETEMPLATE'
    template_vars = {'TEMPLATEVARS': TEMPLATEVARS}
    return render(request, template, template_vars)