Django 템플릿에서 settings.py의 상수에 접근하는 방법
템플릿 태그 사용
Django는 템플릿 태그를 통해 settings.py의 값을 템플릿에 삽입할 수 있도록 합니다. 가장 일반적인 방법은 다음과 같습니다.
{% load staticfiles %}
<img src="{% static 'images/logo.png' %}">
<h1>{% block title %}{{ SITE_NAME }}{% endblock %}</h1>
템플릿 컨텍스트 프로세서 사용
템플릿 컨텍스트 프로세서는 템플릿에 전달되는 컨텍스트를 수정하는 데 사용됩니다. 컨텍스트 프로세서를 만들어 settings.py의 값을 컨텍스트에 추가할 수 있습니다.
from django.conf import settings
def my_context_processor(request):
return {
'settings': settings,
}
# settings.py에 MY_TEMPLATE_CONTEXT_PROCESSORS 추가
TEMPLATES = [
{
...
'OPTIONS': {
...
'context_processors': [
...
'my_project.context_processors.my_context_processor',
],
},
},
]
이렇게 하면 템플릿에서 다음과 같이 settings.py의 값에 접근할 수 있습니다.
{% for key, value in settings.items %}
<p>{{ key }}: {{ value }}</p>
{% endfor %}
템플릿 함수는 템플릿에서 사용할 수 있는 사용자 정의 함수를 만드는 데 사용됩니다. settings.py의 값을 사용하는 템플릿 함수를 만들 수 있습니다.
from django.conf import settings
@register.simple_tag
def get_setting(key):
return getattr(settings, key, None)
# 템플릿에서 사용
{% get_setting 'DEBUG' %}
주의 사항
- settings.py의 값은 변경될 수 있으므로 템플릿에서 직접 사용하지 않는 것이 좋습니다.
- 템플릿에서 settings.py의 값에 접근해야 하는 경우 위의 방법 중 하나를 사용하여 간접적으로 접근하는 것이 좋습니다.
예제 코드
# settings.py
DEBUG = True
SITE_NAME = "My Site"
# my_project/context_processors.py
from django.conf import settings
def my_context_processor(request):
return {
'settings': settings,
}
# my_project/templates/index.html
{% load staticfiles %}
<img src="{% static 'images/logo.png' %}">
<h1>{% block title %}{{ SITE_NAME }}{% endblock %}</h1>
{% for key, value in settings.items %}
<p>{{ key }}: {{ value }}</p>
{% endfor %}
{% get_setting 'DEBUG' %}
이 코드는 다음과 같이 작동합니다.
settings.py
는DEBUG
및SITE_NAME
상수를 정의합니다.my_project.context_processors.my_context_processor
는settings
객체를 템플릿 컨텍스트에 추가하는 템플릿 컨텍스트 프로세서입니다.my_project.templates.index.html
은 다음과 같은 작업을 수행하는 템플릿입니다.{% load staticfiles %}
태그는 정적 파일 URL을 템플릿에서 사용할 수 있도록 합니다.{% static 'images/logo.png' %}
태그는images/logo.png
이미지에 대한 정적 파일 URL을 출력합니다.<h1>{% block title %}{{ SITE_NAME }}{% endblock %}</h1>
태그는SITE_NAME
상수를 사용하여 페이지 제목을 출력합니다.{% for key, value in settings.items %}
루프는settings
객체의 모든 키와 값을 반복하고 각 키와 값 쌍을 출력합니다.{% get_setting 'DEBUG' %}
태그는DEBUG
상수의 값을 출력합니다.
Django 템플릿에서 settings.py의 상수에 접근하는 대체 방법
환경 변수 사용
settings.py의 상수를 환경 변수로 설정할 수 있습니다. 그런 다음 템플릿에서 os.environ
객체를 사용하여 환경 변수에 접근할 수 있습니다.
# settings.py
DEBUG = True
SITE_NAME = "My Site"
# .env 파일
DEBUG=True
SITE_NAME=My Site
# my_project/templates/index.html
<h1>{{ os.environ['SITE_NAME'] }}</h1>
템플릿 파일 시스템 사용
settings.py의 상수를 JSON 파일과 같은 템플릿 파일 시스템에 저장할 수 있습니다. 그런 다음 템플릿에서 {% include %}
태그를 사용하여 템플릿 파일을 포함하고 상수에 접근할 수 있습니다.
# settings.py
DEBUG = True
SITE_NAME = "My Site"
# my_project/templates/settings.json
{
"DEBUG": true,
"SITE_NAME": "My Site"
}
# my_project/templates/index.html
{% include 'settings.json' %}
<h1>{{ settings.SITE_NAME }}</h1>
커스텀 템플릿 태그 사용
settings.py의 상수에 접근하는 사용자 정의 템플릿 태그를 만들 수 있습니다.
from django.template import Library, Node
register = Library()
@register.simple_tag
def get_setting(key):
from django.conf import settings
return getattr(settings, key, None)
# my_project/templates/index.html
{% get_setting 'DEBUG' %}
이러한 방법은 특정 상황에서 유용할 수 있지만 위에서 설명한 방법보다 덜 일반적입니다.
- 환경 변수나 템플릿 파일 시스템을 사용하는 경우 settings.py의 값을 변경하면 템플릿 캐시를 지워야 변경 사항이 적용됩니다.
- 커스텀 템플릿 태그를 사용하는 경우 코드를 더 많이 작성해야 하며 템플릿 코드를 더 복잡하게 만들 수 있습니다.
django django-templates django-settings