2017-09-12 16 views
0

私はカスタムのdjangoテンプレートタグを作成しています。関数内で変数名を動的に指定する

初歩的なバージョン:

import models 

@register.filter 
def intensity1(value): 
    return models.CHOICES_FOO[value] 

だから、私は思っ

をそれはちょうどmodel.FOOリスト

のvalue'th要素を返します。しかし、私は実際には、いくつかの異なるリストを持って、models.CHOICES_BARmodels.CHOICES_BAZより一般化された関数を作成し、参照する変数リストを指定するvalueargを渡します。

@register.filter 
def intensity2(value, arg): 
    return models.arg[value] 


arg = "INTENSITY_CHOICES" 
print (intensity2(value, arg)) 

もちろん、これは機能しません。失敗するとmodule 'models' has no attribute 'arg'

何かそのようなことを述べる方法はありますか?またはこれらの選択肢をすべてdictに保存しておき、そのキーを参照して検索する方が良いでしょうか?

答えて

2

あなたは名前でプロパティを取得するためにgetattrを使用することができます。

return getattr(models, arg)[value] 
+1

'選択肢のdict'は、私は行くだろうか、おそらくですが、これは名前でアイテムにアクセスする一般的な問題を解決する方法です。 –

関連する問題