Автономное приложение Django - проблема с чтением настроек приложения в основном проекте
Я использую Django 3.2
I am writing a standalone app MyApp that uses GeoIP2
Я хочу, чтобы в проекте, использующем приложение MyApp, можно было сделать одно из следующих действий.
- set GEOIP2_PATH in project.settings OR
- (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?