要使part of the django-tables2 API在模板中可用,我想在类上定义一个属性,该属性将属性名转换为另一个方法的参数。
目前的实施(模糊地)看起来像这样:
class Row(object):
_cells = {'first_name': 'James', 'last_name': 'Charland'}
def get_cell(self, name):
return self._cells[name]
这使得无法从django模板访问特定单元格,因为django模板不允许将参数传递给函数。
我想支持像row.cell.first_name
这样的内容,如果内部结构包含dict _cells
,这将很容易。实际上,the implementation有点复杂(获取值涉及调用函数)。计算所有可能单元格的dict是不可取的,因为它可能涉及做不必要的工作。
我天真的解决方案如下:
class Row(object):
_cells = {'first_name': 'James', 'last_name': 'Charland'}
def get_cell(self, name):
return self._cells[name]
@property
def cell(self):
class CellReader(object):
def __init__(self, row):
self.row = row
def __getattr__(self, name):
return self.row.get_cell(name)
return CellReader(self)
哪些有效,并且没有使用太多代码,但感觉有点冗长。标准库中是否有一些我没想到以更简洁的方式实现此功能的东西?