Получить функцию просмотра из запроса URI? - PullRequest
17 голосов
/ 21 июня 2010

Учитывая URI, как /home/ Я хочу найти функцию представления, которой это соответствует, предпочтительно в форме, такой как app.views.home или просто <app_label>.<view_func>.Есть ли функция, которая даст мне это?

Ответы [ 4 ]

30 голосов
/ 21 июня 2010

Вы можете использовать метод resol * , предоставленный django, чтобы получить функцию.Вы можете использовать атрибут __module__ возвращенной функции, чтобы получить метку приложения.Это вернет строку вроде project.app.views.Вот как то так:

from django.core.urlresolvers import resolve

myfunc, myargs, mykwargs = resolve("/hello_world/")
mymodule = myfunc.__module__
5 голосов
/ 21 сентября 2015

Начиная с 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'
3 голосов
/ 25 апреля 2019

Начиная с Django 2.0, модуль django.core.urlresolvers был перемещен в django.urls.

Вам нужно будет сделать это:

from django.urls import resolve

myfunc, myargs, mykwargs = resolve("/hello_world/")
mymodule = myfunc.__module__
0 голосов
/ 17 февраля 2015

Основываясь на ответе KillianDS , вот мое решение:

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) в конце функции просмотра, и она автоматически загрузится app/view.html в качестве шаблона и передачи в контексте запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...