2012-08-06 100 views
1

我有幾個選項卡的配置文件編輯頁面。每個標籤是一個單獨的頁面,所以當我訪問它,我添加了「標籤」參數:將Django模板渲染爲帶查詢字符串的URL

/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 

回答

2

這聽起來像問題是,你的表單操作不包括查詢字符串。

Django的表單和視圖

通常情況下,你會被髮布爲你已經在相同的URL,這意味着你可以做這樣的事情:

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

... 

</form> 

哪裏current_tab是表示上下文變量哪個選項卡被選中。根據您目前的代碼,您需要將其添加到render_template調用中的字典中。如果您使用JavaScript來切換標籤頁,則當標籤頁切換時,您還需要更新操作屬性。

+0

正是!謝謝,安德魯! – Marboni 2012-08-06 13:12:17