반응형
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' 카테고리의 다른 글
[Django] 가상 환경에서 Django 사용하기 (0) | 2023.02.01 |
---|---|
[Django] wsgi.py의 역할 및 배포 설정 사항 (0) | 2023.01.26 |
[Django] 프로젝트 개발 순서 (0) | 2023.01.25 |
[Django] 로깅 (0) | 2023.01.24 |
[Django] 클래스형 뷰와 제네릭 뷰 소개 (0) | 2023.01.24 |
댓글