我有几个标签的个人资料编辑页面。每个选项卡都是一个单独的页面,因此当我访问它时,我添加“tab”参数:
/edit/?tab=general
/edit/?tab=contacts
当用户完成填写其中一个标签上的表单(例如/edit/?tab=general
)时,他会提交。如果表单无效,我需要渲染它有错误。浏览器网址输入需要填充/edit/?tab=general
,但是当我呈现网页时,网址为/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
答案 0 :(得分:2)
听起来问题是您的表单操作不包含查询字符串。
通常使用Django表单和视图,您将发布到您已经使用的相同URL,这意味着您可以执行以下操作:
<form method="post" action="?tab={{ current_tab }}">
...
</form>
其中current_tab
是一个上下文变量,指示选择了哪个选项卡。根据您目前的代码,您需要将其添加到render_template调用中的dict中。如果您使用JavaScript切换标签,则在标签切换时也需要更新操作属性。