2010-06-20 2 views

답변

23

django에서 제공하는 resolve 메서드를 사용하여 함수를 사용할 수 있습니다. 반환 된 함수의 __module__ 속성을 사용하여 앱 라벨을 가져올 수 있습니다. 그러면 project.app.views과 같은 문자열이 반환됩니다. 이 같은 뭔가 :

from django.core.urlresolvers import resolve 

myfunc, myargs, mykwargs = resolve("/hello_world/") 
mymodule = myfunc.__module__ 
0

KillianDS's answer 바탕으로, 여기 내 솔루션입니다 :

이제
from django.core.urlresolvers import resolve 

def response(request, template=None, vars={}): 
    if template is None: 
     view_func = resolve(request.META['REQUEST_URI'])[0] 
     app_label = view_func.__module__.rsplit('.', 1)[1] 
     view_name = view_func.__name__ 
     template = '%s.html' % os.path.join(app_label, view_name) 
    return render_to_response(template, vars, context_instance=RequestContext(request)) 

당신이 당신보기 funcs의 끝에서 return response(request)를 호출 할 수 있고 자동으로 템플릿으로 app/view.html을로드합니다 요청 컨텍스트를 전달하십시오.

+2

이미 요청이있는 경우 해결 방법 대신 "request.resolver_match"를 수행하면됩니다. –

3

Django 1.3 (2011 년 3 월) urlresolvers 모듈의 resolve 함수가 ResolverMatch 객체를 반환합니다. 보기 호출 가능 경로를 포함하여 해결 된 URL 일치의 모든 속성에 대한 액세스를 제공합니다.

>>> from django.core.urlresolvers import resolve 
>>> match = resolve('/') 
>>> match.func 
<function apps.core.views.HomeView> 
>>> match._func_path 
'apps.core.views.HomeView' 
관련 문제