Python Django:使用URL请求作为模型名称';s场
我曾经使用URL请求作为要执行的函数的名称。例如,假设请求是Python Django:使用URL请求作为模型名称';s场,python,django,Python,Django,我曾经使用URL请求作为要执行的函数的名称。例如,假设请求是http://localhost:8000/rango/addMember/,则要执行的函数将是addMember。可通过以下方式实现这一目标: def rango(request, funcName): ... eval(funcName)(request) ... return render(request, some.html, someContext) def addMember(request
http://localhost:8000/rango/addMember/
,则要执行的函数将是addMember
。可通过以下方式实现这一目标:
def rango(request, funcName):
...
eval(funcName)(request)
...
return render(request, some.html, someContext)
def addMember(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
使用和使用变量名访问属性
在您的情况下,它将是:
word = Word.objects.get(...)
setattr(word, fieldName, True)
为什么不使用url映射?对不起,我该怎么做?谢谢,我知道了。但我希望避免这种冗长的映射。既然请求就是函数,为什么要列出所有请求?就我而言,有40多个。此外,我的问题是在运行时确定字段,而不是函数。因为使用
eval
是非常糟糕的做法。是的,我知道这不是你的主要问题,这就是为什么我只发表评论:)
word = Word.objects.get(...)
setattr(word, fieldName, True)