我正在使用Web2Py。我试图启用一个似乎没有在任何地方定义的文本框,但不知何故出现在网页上。
反正。
如果登录的用户属于某个组,则会启用该文本框,并且用户可以在文本框中书写。如果他们不是该组的成员,则文本框被禁用 - 他们可以读取之前已写入但无法输入。
似乎影响启用状态的代码是
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 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 定义为
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语句的一部分调用时:
if ( ( canAddComment(step)) and (not flow_completed)):
flow_step_forms[step.name].element('textarea')['_rows'] = 5
每次用户属于A,B或C组之一时,都会出现以下错误:
' NoneType'对象不支持项目分配
任何提示? SIDE NOTE 我也强迫该功能立即返回False,并且我没有收到任何错误。如果我强迫真;我收到错误。简单地通过使方法的第一行返回True
来完成强制 问:我如何让python解释我的函数被调用以接受值True?我在俯瞰什么?答案 0 :(得分:1)
None['_rows'] = 5
引发
TypeError: 'NoneType' object does not support item assignment
因此flow_step_forms[step.name].element('textarea')
会返回None
,大概是因为flow_step_forms[step.name]
没有元素'textarea'
或元素设置为None
。
如果您需要进一步的帮助疑难解答,请修改您的问题以包含您设置的位置,然后我将编辑我的答案。