2011-05-14 111 views

回答

18

你可以這樣做:

from django.core.urlresolvers import resolve 

.... 

resolve(request.path).app_name 

How to get current application in Djangoresolve()

編輯:您現在可以使用request.resolver_match.app_name避免瞭解決第二個時間和避免進口。這樣來做:

request.resolver_match.app_name 
+0

*'resolve(request.path).app_name' * - 在python3/django2中它是'from django.urls import resolve'。而你的答案都不起作用。 – 2018-03-03 15:45:54

2

也許這可以幫助你..

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,)) 

網址將返回所有ADRESS,你可以分析它爲您的應用程序和模型...

4

另一個方法是獲取當前對象或使用self。見下圖

obj.__module__.split('.') 

這將返回一個列表,其中的對象名稱由'。'分割。

+0

對不起,什麼是obj? – 2018-03-03 15:55:59

1

您可以從型號獲得應用程序名稱:Book._meta.app_label

我在django/contrib/admin/widgets.py發現:

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__ 

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

應該是最簡單的方法。其次將a.b.c轉換爲c

相關問題