2013-02-27 68 views
0

您好我有一個函數可以從數據庫的總共四個值中提取一個值,我需要根據這個值顯示一些數據將值分配給Django中的數據庫內容的變量

update_grp = User_Groups.objects.get(user_id=request.user.id) 
    showopen = update_grp.profilegroup 
    if showopen == "trendy": 
     slidercategory = Category.objects.get(id = 65) 
    elif showopen == "Classic": 
     slidercategory = Category.objects.get(id = 63) 
    elif showopen == "Glam": 
     slidercategory = Category.objects.get(id = 81) 
    elif showopen == "Bohemian": 
     slidercategory = Category.objects.get(id = 62) 
    sliderproduct = slidercategory.product_set.all() 

,但我得到了以下錯誤

local variable 'slidercategory' referenced before assignment 

請建議我在哪裏做的錯誤

回答

1

showopen變量在四個選項由您的代碼提供。如果您沒有調試器來查看變量的實際內容,請在您的代碼中添加一些打印語句,將該變量輸出到控制檯。

update_grp = User_Groups.objects.get(user_id=request.user.id) 
    showopen = update_grp.profilegroup 
    print showopen 
    #.. 
+0

感謝您的答覆是的,你是正確的showopen變量在四個選項,但現在我能得到它的價值,它工作正常 – user2106353 2013-02-27 10:55:45

+0

很好聽 - 樂意幫忙。 – 2013-02-27 10:56:15

0

你錯過了一個'別人的條款,因此解釋器看到的有可能是其中「slidercategory」不支持您的功能範圍(其中非if語句匹配)內的情況。

要麼在你的函數的頂部添加一個else子句或賦值sliderproduct ='somedefaultvalue',另一個解決方案是將返回條移動到if子句的範圍中,這會導致無返回ifs匹配。

>>> def test(foo): 
...  if foo == 2: 
...  bar = 'hello' 
...  elif foo == 3: 
...  bar = 'goodbye' 
...  return bar 
>>> test(2) 
>>> 'hello' 
>>> test(1) 
UnboundLocalError: local variable 'bar' referenced before assignment 
+0

我的翻譯不是這種情況。我做了一個快速測試,賦值爲'if True'和'elif False'(不是別的),並且我的函數工作正常。 – 2013-02-27 09:44:18

+0

如果比較指定的值,「if True」如何?在賦值之前引用的'local variable'slidercategory'的錯誤明確指出了問題。 – 2013-02-27 09:58:27

+0

沒有,我在Python 2.7.2中運行了上面的代碼,它運行良好 - test(2)返回'hello' 。 – 2013-02-27 10:53:22