Evgenii Legotckoi
27 вересня 2016 р. 00:06

Django - Підручник 010. Отримання змінних у файлі шаблону в Django з settings.py

У файлі settings.py у Django ми зберігаємо всю необхідну конфігураційну інформацію нашої програми, до складу якої може входити URL сайту або шляхи до певних директорій , в яких зберігаються спеціальні файли та багато іншого.

І іноді потрібно дані змінні використовувати в шаблонах, той же URL сайту. Але просто прописавши в шаблоні цю константу через {{ SITE_URL }} , скористатися цією змінною не вдасться. Одним із способів вирішення цього завдання є реєстрація шаблонних тегів, які виконуватимуть певний функціонал, наприклад, забирати атрибут з файлу налаштувань на його ім'я.


Реєстрація шаблонного тега

Якщо вже мова зайшла про використання SITE_URL у шаблоні, то домовимося, що у файлі settings.py ми прописали цю змінну.

SITE_URL = 'www.mysite.com'

А далі йдемо в ту програму, в якій зареєструємо тег для отримання атрибутів з файлу settings.py. У моєму випадку ця програма home. У даному додатку необхідно буде створити каталог templatetags і розмістити в ньому два файли: init .py і наприклад home\ _extras.py .

Отримаємо наступну структуру програми:

home/
    migrations/
    templates/
    templatetags/
        __init__.py
        home_extras.py
    __init__.py
    admin.py
    apps.py
    models.py
    sitemap.py
    tests.py
    urls.py
    views.py

А тепер подивимося вміст файлу home_extras.py.

from django import template
from django.conf import settings

register = template.Library()


# Регистрируем тег, с помощью которого будем получать атрибуты из файла settings
@register.simple_tag
def get_attribute(name):
    return getattr(settings, name, "")

Використання у шаблоні

А використання у шаблоні буде ще простіше. Потрібно буде лише підвантажити у шаблоні розширення тегів та скористатися даним тегом, передавши йому ім'я атрибута, який хочемо отримати.

{% load home_extras %}
{% get_attribute 'SITE_URL' %}"

Для Django рекомендую VDS-сервера хостера Timeweb .

Вам це подобається? Поділіться в соціальних мережах!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up