2011-04-21 19 views
5

Genel ad sınıfını url adından almanın önerilen yolu nedir?Django: Genel ad sınıfını url adından alın

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

'Ev' ile birlikte, HomeView sınıfını almak istiyorum.

+0

Sen tersi gitmek isteyebilirsiniz: görünüm sınıfı gelen adıyla url adının. Niye ya? Çünkü sınıf isimleri daha çok yapılandırılmış bir dünya. Örneğin, bir yazım hatası sonrasında, rahatsız edici satırın burada çözülmeyen bir ad içermesi durumunda daha anlamlı bir hata mesajı alırsınız. (Sınıf tabanlı görünümler için, hem çözümleme hem de notlamayı daha basit hale getirmeniz için '.as_view()' öğesini uygulayan bir yardımcı olacaktır.) –

cevap

8

ben şu soruya aldığım get_class: Does python have an equivalent to 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)) 

Bu ben diğer cevaplar çok açığım kendim ile geldi budur. Pickels' cevabı esinlenerek

6

:() döner as_view işlevlerine

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__) 
1

Django 1.9 tanıtıldı 2 nitelikler. view_initkwargs ve view_class. Pickles ile bu birleştiren

cevabı:

url = reverse('home') 
view = resolve(url).func.view_class