2011-05-14 20 views

cevap

18

Sen yapabilirdi:

from django.core.urlresolvers import resolve 

.... 

resolve(request.path).app_name 

How to get current application in Django ve resolve()

EDIT Bkz: Artık ikinci kez çözme önler ve ithalat önler request.resolver_match.app_name kullanabilirsiniz. ...

from django.core import urlresolvers 
from django.contrib.contenttypes.models import ContentType 

content_type = ContentType.objects.get_for_model(self.__class__) 
url = urlresolvers.reverse("admin:%s_%s_change" % (content_type.app_label, 
     content_type.model), args=(self.id,)) 

url sen iyi adresi dönecektir ve uygulamanız ve model için ayrıştırabilir ..

+0

* 'çöz (request.path) .app_name' * - python3/django2 içinde' django.urls import resolve'' dır. Ve her iki cevabın da işe yaramadı. –

2

belki bu size yardımcı olabilir: bu şekilde yapın Bunu yapmanın yolu güncel nesneyi elde etmek veya kendini kullanmaktır.

obj.__module__.split('.') 

Bu tarafından bölünmüş nesne adıyla bir listesini döndürür feryat bakınız ''

4

Başka

request.resolver_match.app_name 
+0

Üzgünüm, obj nedir? –

1

Modelden uygulama adı alabilirsiniz: Book._meta.app_label.

ben django/contrib/admin/widgets.py bulduğum:

class RelatedFieldWidgetWrapper(forms.Widget): 
    ... 
    def get_context(self, name, value, attrs): 
     from django.contrib.admin.views.main import IS_POPUP_VAR, TO_FIELD_VAR 
     rel_opts = self.rel.model._meta 
     info = (rel_opts.app_label, rel_opts.model_name) 
     ... 
    ... 
0
__package__ 

veya

__package__.rsplit('.', 1)[-1] 

kolay yolu olmalıdır. İkincisi a.b.c'u c'a dönüştürür.

İlgili konular