2010-06-20 4 views

ответ

23

Вы можете использовать метод resolve, предоставляемый django, чтобы получить функцию. Вы можете использовать атрибут __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)) 

Теперь вы можете просто позвонить return response(request) в конце вашего зрения funcs, и он будет автоматически загрузить app/view.html в качестве шаблона и передать в контексте запроса.

+2

У вас уже есть запрос, который вы можете просто выполнить request.resolver_match вместо того, чтобы разрешать –

3

Начиная с Django 1.3 (март 2011 г.) функция resolve в модуле urlresolvers возвращает объект ResolverMatch. Это обеспечивает доступ ко всем атрибутам разрешенного URL-адреса, включая путь, вызываемый вызовом.

>>> from django.core.urlresolvers import resolve 
>>> match = resolve('/') 
>>> match.func 
<function apps.core.views.HomeView> 
>>> match._func_path 
'apps.core.views.HomeView' 
Смежные вопросы