我正在使用Web2Py。我試圖啓用一個似乎沒有被定義在任何地方,但以某種方式出現在網頁上的文本框。Python沒有解釋爲True - 'NoneType'對象不支持項目分配
反正。
如果用戶登錄屬於某個組,則文本框已啓用,用戶可以在文本框中進行書寫。如果他們不是該組的成員,則該文本框將被禁用 - 他們可以讀取之前編寫的內容,但無法輸入。
似乎影響使能狀態的代碼是這個
if __userCanPerformStep(step) and not flow_completed:
flow_step_forms[step.name].element('textarea')['_rows'] = 5
__userCanPerformStep作爲
def __userCanPerformStep(step_row):
if auth.user.id in step_row.target_users:
return True
for group_id in step_row.target_groups:
if db((db.auth_membership.user_id == auth.user.id) & (db.auth_membership.group_id == group_id)).count() > 0:
return True
if auth.has_group_membership("systemadmin"):
return True
return False
has_group_membership被定義爲
def has_group_membership(self, groupname):
if self.db((self.db.auth_group.id > 0) & (self.db.auth_group.role==groupname)).count() > 0:
group_id = self.db((self.db.auth_group.id > 0) & (self.db.auth_group.role==groupname)).select().first().id
return self.has_membership(group_id)
return False
(步驟)被定義
由於__userCanPerformStep在很多地方使用,我創建了一個新的方法,如:定義爲
def has_group_membership_or(self, groupnames):
if self.db((self.db.auth_group.id > 0) & (self.db.auth_group.role.belongs(groupnames))).count() > 0:
for groupname in groupnames:
group = self.db((self.db.auth_group.id > 0) & (self.db.auth_group.role==groupname)).select().first()
if group and self.has_membership(group.id):
return True
return False
當我現在調用該函數爲IF的一部分
def canAddComment(step_row):
if auth.has_group_membership_or(["groupA", "groupB", "groupC"]):
return False
if auth.user.id in step_row.target_users:
return False
return False
和has_group_membership_or像這樣的陳述:
if ((canAddComment(step)) and (not flow_completed)):
flow_step_forms[step.name].element('textarea')['_rows'] = 5
並且每當用戶屬於到基團A,B或C.我得到以下錯誤之一:
「NoneType」對象不支持項目分配
任何提示?? 邊注 我也強制該函數立即返回False,我沒有得到任何錯誤。如果我強制True;我收到錯誤。強制只需通過使方法的第一行爲return True
問:如何讓python解釋我的函數被調用來接受值True?我忽略了什麼?
發佈完整的堆棧跟蹤。它會告訴你什麼對象是'None',它在哪裏是'None'。 – TemporalWolf