如何在django中使用python获取应用程序名称

时间:2011-05-14 06:32:08

标签: python django django-views

如果您在视图中并希望使用Python检索应用程序名称(应用程序名称将用于进一步的逻辑),您将如何做?

7 个答案:

答案 0 :(得分:22)

你可以这样做:

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

答案 1 :(得分:4)

另一种方法是获取当前对象或使用self。见吼声

obj.__module__.split('.')

这将返回一个列表,其中对象名称由'。'

拆分

答案 2 :(得分:4)

您可以从型号获取应用程序名称: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)
        ...
    ...

答案 3 :(得分:3)

也许这可以帮到你..

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会返回您的所有地址,您可以针对您的应用和型号进行解析...

答案 4 :(得分:3)

__package__

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

应该是最简单的方法。第二次将a.b.c转换为c

答案 5 :(得分:3)

总而言之,如果您要查找代码编写位置的app_name,请使用以下代码:

app_name = __package__

但是,如果您需要app_name调用对象的位置(可能在编码应用程序以外的应用程序中),请使用以下方法:

import sys
from django.urls import resolve

app_name = sys.modules[resolve(request.path_info).func.__module__].__package__

答案 6 :(得分:0)

此解决方案不是很简单,但是可以解决

import sys

sys.modules[resolve(request.path_info).func.__module__].__package__