본문 바로가기
  • 실행력이 모든걸 결정한다
Django

[Django] apps.py의 역할

by 김코더 김주역 2023. 1. 26.
반응형

1. apps.py란?

- 프로젝트의 전반적인 항목들을 설정하는 곳은 settings.py이고, 각 애플리케이션에 대한 항목들을 설정하는 곳은 apps.py 파일이다.

from django.apps import AppConfig

class BlogConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'blog'

- 앱의 별칭을 부여하거나 시그널 수신자를 등록하는 데 많이 쓰인다.

 

 

 

2. 활용 예시 - 앱의 별칭 설정

- 앱의 별칭은 verbose_name 속성을 통해 설정한다.

from django.apps import AppConfig

class BlogConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'blog'
    verbose_name = 'My Story App'

- 설정한 앱의 별칭은 django.apps의 apps.get_app_configs()로 설정 클래스 리스트를 반환 받고, 해당 설정 클래스의 verbose_name 속성으로 받아올 수 있다.

from django.apps import apps
from django.views.generic import TemplateView

class HomeView(TemplateView):
    template_name='test.html'
    
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        dictVerbose={}
        for app in apps.get_app_configs(): # settings.py의 INSTALLED_APPS에 등록된 각 앱의 설정 클래스 리스트를 반환
            if 'site-packages' not in app.path: # 애플리케이션 디렉토리 경로에 'site-packages'가 없는 경우 (외부 라이브러리 앱이 아닌 경우)
                dictVerbose[app.label] = app.verbose_name
        context['verbose_dict']=dictVerbose
        return context

결과

{% for key, value in verbose_dict.items %}
    {{ key }} {{value}} <br>
{% endfor %}

 

- 참고로, settings.py의 INSTALLED_APPS에 설정 클래스 대신 모듈명으로 등록했다면, 앱의 설정 클래스를 참고할 수 없게 되기 때문에 위와 같은 결과가 나오지 않는다. ★

※ 이런 경우는 __init__.py의 default_app_config 항목으로 지정된 클래스가 설정 클래스로 사용되며, default_app_config 항목도 정의되지 않으면 장고의 기본 AppConfig 클래스가 설정 클래스로 사용된다.

 

아래 공식 문서에서 참고할 수 있는 내용들이다.

- verbose_dict을 비롯한 name, label, path, default, default_auto_field 속성

- 앱의 설정 클래스에서 제공하는 get_models, get_model, ready 메소드

- django.apps의 apps에서 제공해주는 public API

https://docs.djangoproject.com/en/4.1/ref/applications/

 

Django

The web framework for perfectionists with deadlines.

docs.djangoproject.com

 

반응형

댓글