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

Zac*_*ach 17 python django django-views

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

Hen*_*nry 23

你可以这样做:

from django.core.urlresolvers import resolve

....

resolve(request.path).app_name
Run Code Online (Sandbox Code Playgroud)

请参阅如何在Django中获取当前应用程序解析()

编辑:您现在可以使用request.resolver_match.app_name,它可以避免第二次解析并避免导入.这样做:

request.resolver_match.app_name
Run Code Online (Sandbox Code Playgroud)

  • *`resolve(request.path).app_name`* - 在python3/django2中它是`来自django.urls import resolve`.你的两个答案都不起作用. (3认同)
  • `resolver_match` 在中间件中不可用 (3认同)

sim*_*mno 7

您可以从模型中获取应用程序名称: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)
        ...
    ...
Run Code Online (Sandbox Code Playgroud)


Dr *_*tan 5

另一种方法是获取当前对象或使用self。看下面

obj.__module__.split('.')
Run Code Online (Sandbox Code Playgroud)

这将返回一个列表,其中对象名称用“。”分隔。

  • 抱歉,obj是什么? (4认同)

Smi*_*nth 5

__package__
Run Code Online (Sandbox Code Playgroud)

或者

__package__.rsplit('.', 1)[-1]
Run Code Online (Sandbox Code Playgroud)

应该是最简单的方法。第二个转换a.b.cc.