2014-03-28 46 views
0

我是django的newb,所以這可能是一個簡單的錯誤。當我發送視圖列表參數user_id從一個相同的HttpResponseRedirect從不同的視圖(相同的重定向到視圖添加)。它工作正常。HttpResponseRedirect Reverse Args返回視圖的名稱

但是,當我點擊模板提交按鈕和調用add視圖我得到

無效字面INT()基數爲10:「添加」

使用我看到了打印功能該正確的ID int從列表傳遞到模板,但在模板和回憶列表之間的某處查看它會丟失。然後添加將str「添加​​」傳遞給列表視圖。任何幫助將不勝感激。

#views.py 
def list(request, user_id): #list:list 
    #... 
    #...doing stuff 
    #... 
    context = RequestContext(request) 

    #Gets Menus 
    main = Menu.objects.get(pk=1) #pk 1 is the Main Menu made 
    main_menu = main.food_item_set.all() 

    mine = Menu.objects.get(pk=2) #pk 2 is the My Menu made 
    print user_id 
    p = Plan_User.objects.get(pk = int(user_id)) 
    id = p.id 

    return render_to_response('foods_data/list.html', {'main_menu':main_menu, 
           'user_id':id}, context) 

def add(request): #list:add 
    """Adds the selected item to My Menu.""" 
    if request.method == "POST": 
     mine = Menu.objects.get(pk=2) #pk 2 is the My Menu made in getList.py 
     f_name = request.POST.get("choice") 
     user_number = request.POST.get("user_number") 
     food_entry = Food_Item.objects.get(food_name=f_name) 
     food_entry.menus.add(mine) 

     return HttpResponseRedirect(reverse("list:list", args=(user_number,))) 


#list.html 
{% for object in main_menu %} 
<form id='main_list' method='post' action="{% url 'list:add' %}"> 
    {% csrf_token %} 
    <input type="hidden" name="choice" value="{{ object.food_name }}"> 
    <input type="hidden" name="user_number" value="{{ user_id }}"> 
    <input type="submit" value="Add to Menu" name="selection"/> 
    <label for="object{{ forloop.counter }}"></label></br> 
</form> 


#urls.py 

urlpatterns = patterns('', 
    url(r'^(?P<user_id>.+)/$', views.list, name='list'), 
    url(r'^add/$', views.add, name='add'), 
    url(r'^remove/$', views.remove, name='remove'), 
) 
+0

兩件事情 - 做__not__使用'添加'和'list'作爲函數名。另外,將'。+'的URL模式移動到模式的末尾 – karthikr

回答

0

你試圖使用reverse,傳遞一個位置參數,而不是一個關鍵字說法。儘管在你的代碼中的其他可能的錯誤,你應該能夠使用扭轉你的網址:

return HttpResponseRedirect(reverse("list", args=(), 
    kwargs={'user_id': user_number})) 

正如@karthikr提到的,你要重新安排你的URL模式。 Django嘗試以自上而下的方式匹配模式,並且您的第一個URL模式允許使用任何字符.這會導致您的第一個模式匹配,無論第二個和第三個模式匹配與否。

另外你真的想確保在URL中的值匹配你期待在視圖什麼,這這種情況下,一個或多個連續的整數:

#urls.py 

urlpatterns = patterns('', 
    url(r'^add/$', views.add, name='add'), 
    url(r'^remove/$', views.remove, name='remove'), 
    url(r'^(?P<user_id>\d+)/$', views.list, name='list'), 
) 
相關問題