groupbyフィルターを機能させようとすると、Atributeエラーが発生します。私のgroupbyコードは次のようになります:
{% for year, year_purchases in purchases|groupby('PurchaseDate.year')|reverse %}
<h2 class="year">{{ year }}</h2>
{% for ... %}
{% endfor %}
{% endfor %}
PurchasesがPurchaseEntityのリストである場合:
class PurchaseEntity:
def __init__(self):
self.PurchaseDate = ''
self.Orders = []
def load_from_query(self,result):
self.PurchaseDate = result.PurchaseDate
次のエラーが発生します。
AttributeError
AttributeError: PurchaseEntity instance has no attribute '__getitem__'
問題はenvironment.pyにあるようです:
def getitem(self, obj, argument):
"""Get an item or attribute of an object but prefer the item."""
try:
return obj[argument]
except (TypeError, LookupError): #<-- Here it raises the error
if isinstance(argument, basestring): #<-- It never reaches here
try:
attr = str(argument)
except Exception:
pass
else:
try:
return getattr(obj, attr)
except AttributeError:
pass
return self.undefined(obj=obj, name=argument)
getitem関数はどこでも使用されているため、Jinja2または「groupby」エラーではないと思います。私はそれをグーグルで検索しましたが、関連するものは何も見つかりませんでした。ただし、私が行ったことは、「except(TypeError、LookupError):」行を変更することであり、これは次の代替手段で機能しました。
except:
except Exception:
クラスの削除が間違っているのか、何かが足りないのかはわかりません。他のクラス(SQLAlchemyでautoloadを使用して作成)を試したところ、正常に機能したためです。助言がありますか?
ところで、getitemに送信される引数は次のとおりです。
>>> (obj,argument)
(<project.logic.purchase.PurchaseEntity instance at 0x050DF148>, 'PurchaseDate')
>>> obj.PurchaseDate
datetime.datetime(2012, 9, 25, 17, 1, 44)