2

我有几个选项卡的个人资料编辑页面。每个选项卡都是一个单独的页面,所以当我访问它时,我添加了“选项卡”参数:

/edit/?tab=general 
/edit/?tab=contacts

当用户完成在这些选项卡之一(例如,/edit/?tab=general)上填写表单时,他会提交它。如果表单无效,我需要用错误呈现它。浏览器 URL 输入需要填写/edit/?tab=general,但是当我渲染页面时, URL 是/edit/.

我可以以某种方式改变它吗?谢谢。

代码:

def _profile_edit_general(request):
profile = request.user.get_profile()
if request.method == 'POST':
    form = forms.ProfileEditGeneralForm(request.POST, instance=profile)
    if form.is_valid():
        form.save()
else:
    form = forms.ProfileEditGeneralForm(instance=profile)
return render_template(request, 'profiles/edit/general.html', {
    'profile_edit_general_form': form
})

@login_required
def profile_edit(request):
if request.method == 'POST':
    if 'profile_edit_general_submit' in request.POST:
        return _profile_edit_general(request)
else:
    tab = request.GET.get('tab')
    if tab == 'general':
        return _profile_edit_general(request)
    else:
        return Http404
4

1 回答 1

3

听起来问题在于您的表单操作不包含查询字符串。

通常使用 Django 表单和视图,您将发布到与您已经在相同的 URL 上,这意味着您可以执行以下操作:

<form method="post" action="?tab={{ current_tab }}">

...

</form>

Wherecurrent_tab是一个上下文变量,指示选择了哪个选项卡。根据您目前的代码,您需要将其添加到您的 render_template 调用中的字典中。如果您使用 JavaScript 来切换选项卡,那么您也需要在选项卡切换时更新 action 属性。

于 2012-08-06T12:30:00.400 回答