我曾经使用URL请求作为要执行的函数的名称。例如,假设请求为http://localhost:8000/rango/addMember/
,则要执行的函数为addMember
。可以通过以下方式实现:
def rango(request, funcName):
...
eval(funcName)(request)
...
return render(request, some.html, someContext)
def addMember(request):
...
也就是说,调用函数是在运行时确定的,以避免以下尴尬的安排(假设有几十个函数):
if funcName=='addMember':
addMember(request)
elif funcName=='deleteMember':
deleteMember(request)
...
我想知道在运行时是否有类似的方法来确定模型的字段,如下所示:
class Word(models.Model):
name = CharField()
adv = BooleanField()
adj = BooleanField()
noun = BooleanField()
...
def rango(request, fieldName):
word = Word.objects.get(...)
word.eval(fieldName) = True
...
Django会抱怨声明word.eval(fieldName)
没有eval
这样的属性。