使用查询字符串将Django模板呈现为URL

时间:2012-08-06 12:10:57

标签: django

我有几个标签的个人资料编辑页面。每个选项卡都是一个单独的页面,因此当我访问它时,我添加“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

1 个答案:

答案 0 :(得分:2)

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

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

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

...

</form>

其中current_tab是一个上下文变量,指示选择了哪个选项卡。根据您目前的代码,您需要将其添加到render_template调用中的dict中。如果您使用JavaScript切换标签,则在标签切换时也需要更新操作属性。