Django: получить универсальный класс представления по имени URL - PullRequest
5 голосов
/ 21 апреля 2011

Каков рекомендуемый способ получения универсального класса представления из имени URL-адреса?

url(r'^$', HomeView.as_view(), name='home')

Итак, с помощью «home» я хочу получить класс HomeView.

Ответы [ 3 ]

8 голосов
/ 21 апреля 2011

Класс get_class, полученный из следующего вопроса: Имеет ли python эквивалент Java Class.forName ()?

url = reverse('home')
resolver_match = resolve(url)
func = resolver_match.func
module = func.__module__
view_name = func.__name__

clss = get_class( '{0}.{1}'.format( module, view_name ) )

Это то, что я придумал сам, я очень открыт для других ответов.

6 голосов
/ 23 января 2014

Вдохновленный ответом Пикельса:

import importlib 
from django.core.urlresolvers import reverse, resolve

view_name = 'my_view_name'

view_func = resolve(reverse(view_name)).func
module = importlib.import_module(view_func.__module__)
view = getattr(module, view_func.__name__)
3 голосов
/ 22 июня 2017

Django 1.9 ввел 2 атрибута в функции, которые возвращает as_view ().view_initkwargs и view_class.

Комбинируя это с ответом Соленья:

url = reverse('home')
view = resolve(url).func.view_class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...