Подтвердить что ты не робот

Как получить имя приложения, используя python в django

Если вы находитесь в представлении и хотите получить имя приложения с помощью Python (имя приложения будет использоваться для дальнейшей логики), как вы это сделаете?

4b9b3361

Ответ 1

Вы могли бы сделать:

from django.core.urlresolvers import resolve

....

resolve(request.path).app_name

См. Как получить текущее приложение в Django и resol()

.ОБНОВЛЕНИЕ: теперь вы можете использовать request.resolver_match.app_name, что позволяет избежать повторного разрешения и избежать импорта. Сделайте это так:

request.resolver_match.app_name

Ответ 2

Другой способ сделать это - получить текущий объект или использовать self. см. ниже

obj.__module__.split('.')

Это вернет список с именем объекта, разделенным символом '.'

Ответ 3

Вы можете получить имя приложения из модели: 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)
        ...
    ...

Ответ 4

возможно, это может помочь вам.

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 вернет вам весь адрес, и вы сможете проанализировать его для своего приложения и модели...

Ответ 5

__package__

или

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

должен быть самым простым способом. Второй преобразует a.b.c в c.

Ответ 6

Это решение не очень простое, но оно работает

import sys

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