2017-09-12 48 views
0

我正在製作一個自定義的django模板標籤。動態指定函數中的變量名稱

的初步版本:

import models 

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

它只是返回model.FOO列表

但其實我有幾個不同的列表,models.CHOICES_BAR的value'th元素,models.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'的選擇可能是我怎麼會去,但是這是你如何解決通過名字來訪問項目的一般問題。 –