Автономное приложение Django - проблема с чтением настроек приложения в основном проекте

Я использую Django 3.2

I am writing a standalone app MyApp that uses GeoIP2

Я хочу, чтобы в проекте, использующем приложение MyApp, можно было сделать одно из следующих действий.

  1. set GEOIP2_PATH in project.settings OR
  2. (default) fall back on the GEOIP2_PATH value set in MyApp.settings

Вот что у меня есть на данный момент:

MyApp/settings.py

import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
GEOIP_PATH = os.path.join(BASE_DIR, 'userprofile/geodata')

# ...

MyApp/utils.py

from django.conf import settings
from MyApp import settings as myapp_settings


def get_attribute_from_settings(attribute_name):
    try:
        value = getattr(settings, attribute_name)

    except AttributeError:
        try:
            value = getattr(myapp_settings, attribute_name)

        except AttributeError:
            raise ImproperlyConfigured()

    finally:
        return value 

Код, использующий GeoIP2

from django.contrib.gis.geoip2 import GeoIP2, GeoIP2Exception
from ipware import get_client_ip

geo = GeoIP2()


def do_something(address):
    # Barfs at next line: 
    info = geo.city(address)

Когда вызывается приведенная выше функция, возникает следующее исключение:

raise GeoIP2Exception('GeoIP path must be provided via parameter or the GEOIP_PATH setting.') django.contrib.gis.geoip2.base.GeoIP2Exception: GeoIP path must be provided via parameter or the GEOIP_PATH setting

Как я могу использовать get_attribute_from_settings() для получения GEOIP2_PATH по умолчанию, если он не установлен в project.settings?

Вернуться на верх