2014-10-23 2 views
0

URL 요청을 실행할 함수의 이름으로 사용했습니다. 예를 들어, 요청이 http://localhost:8000/rango/addMember/이라고 가정하면 실행될 함수는 addMember이됩니다.Django : URL 요청을 모델 필드 이름으로 사용합니다.

if funcName=='addMember': 
    addMember(request) 
elif funcName=='deleteMember': 
    deleteMember(request) 
... 

내가 궁금 :

입니다
def rango(request, funcName): 
    ... 
    eval(funcName)(request) 
    ... 
    return render(request, some.html, someContext) 

def addMember(request): 
    ... 

, 실행시에 결정되는 호출하는 기능 (기능 수십가 가정하면) 다음과 같은 어색한 배열을 피하려면 다음은에 의해 달성 될 수있다 word.eval(fieldName)은 가지고 있지 문에 대한

class Word(models.Model): 
    name = CharField() 
    adv = BooleanField() 
    adj = BooleanField() 
    noun = BooleanField() 
    ... 

def rango(request, fieldName): 
    word = Word.objects.get(...) 
    word.eval(fieldName) = True 
    ... 

장고 것이다 불만 사항을 다음과 같이 런타임에 모델의 필드를 결정하는 비슷한 방법이있다 속성은 eval입니다.

+0

왜 사용하지 않는 URL 매핑? – dursk

+0

미안하지만, 어떻게해야합니까? 감사. –

+0

https://docs.djangoproject.com/ko/1.7/topics/http/urls/ – dursk

답변

1

변수 이름을 사용하여 속성에 액세스하려면 getattrsetattr을 사용하십시오. 귀하의 경우에는

, 그것은 다음과 같습니다

word = Word.objects.get(...) 
setattr(word, fieldName, True)