@Pauchenkov
Начинающий программист Django

Как выбрать данные из бд в самом шаблоне джанго? Или как правильнее сделать?

Суть в том что у меня на сайте есть сайдбар. В него нужно вывести данные из модели. Сайдбар подключен к каждой странице сайта. Я не понимаю как сделать выборку из бд (mysql) без url и view. Я тупо не понимаю, как это реализовать. Буду благодарен если подскажете. Вам профи - это легко, а для новичка - сложновато( от этого - все вопросы.
  • Вопрос задан
  • 2876 просмотров
Решения вопроса 1
@Pauchenkov Автор вопроса
Начинающий программист Django
Вот мой способ решения, может быть кому-то пригодится.
ВСЕ ЗАДЕЙСТВОВАННЫЕ ПРИЛОЖЕНИЯ ДОЛЖНЫ БЫТЬ ПОДКЛЮЧЕНЫ!
Проблема решилась написанием кастомного тега (собственного тега) в django 1.8.2!
Делал я вот так:
1) Создаем в папке с ПРИЛОЖЕНИЕ (АППОМ, ну т.е. в той папке, которая создалась при выполнении команды startapp) папку templatetags.
2) В папке templatetags создаем:
а) Пустой файл __init__.py (файл, который ставит в известность Python, что эта директория является модулем Python)
б) Файл с названием нашего нового тега (в моем случе он называется sidebar.py). В этом файле будет происходить некая обработка! В моем случае: регистрация тега, выборка из БД и возврат контекста.
3) Открываем наш только что созданный файл sidebar.py и пишем:

from django import template

from blog.models import RightSidebarWidgets #Импортируем нужные нам модели.

# экземпляр класса, в котором все наши теги будут зарегистрированы
register = template.Library()

# регистрируем наш тег, который будет выводить шаблон right_sidebar.html
@register.inclusion_tag("blog/right_sidebar.html") #В кавычках вводите путь до шаблона! он может быть у каждого свой!

# Создаем сам тег!
def show_sidebar():
	widgets = RightSidebarWidgets.objects.all() # Делаем выборку из БД
	return {'widgets': widgets} # Возвращаем контекст


Далее в том файле где должен быть подключен наш зарегистрированный тег и его шаблон пишем:
  • В начале файла пишем: {% load sidebar %} # Где sidebar - Название нашего файла тега, находящегося в папке templatetags, но только без расширения!
  • И в том месте где должен быть выведен наш шаблон пишем: {% show_sidebar %} # Где show_sidebar - Название нашего тега описанного и зарегистрированного в файле sidebar.py, который в свою очередь, лежит в папке templatetags

Вот собственно и все. Таким способом я решил проблему. Если вдруг у Вас не работает тег - проверьте его на ошибки и если в теге у Вас нет ошибок и Вы в этом уверены, то
Стоит проверить, что:
— в директории templatetags есть файл __init_.py
— приложение добавлено в INSTALLED_APPS
— если шаблонный тег приложения myapp вызывается из шаблона приложения otherapp, то в INSTALLED_APPS ‘myapp’ должно быть левее (выше) ‘otherapp’
— установлены все зависимости, необходимые в myapp_tags.py
— убедиться, что возможно импортировать сам myapp_tags.py
python manage.py shell
>>> from myapp.templatetags import myapp_tags

— сервер перезагружен после последнего изменения кода
---
Всем спасибо и удачи!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 5
svfat
@svfat
☺Нужен VPS? Два месяца бесплатно. Смотри профиль☺
Шаблонизатор джанго ничего не знает о базе данных и сделать выборку из бд с помощью шаблонизатора не получится. Надо передавать данные в шаблон через view.
Ответ написан
@Postalus
Два варианта:
1. Написать свой template tag.
2. Добавить свой context processor.
Ответ написан
Комментировать
sim3x
@sim3x
Новичку стоит начать читать 2 scoops of django

Новичку надо пройти https://docs.djangoproject.com/en/1.8/intro/tutorial01/

Темплейт только показывает данные
Вью только обьединяется данные в один набор
Моделть хранит и делает большую часть работы
Ответ написан
zelsky
@zelsky
Согласен с Postalus просто написать свой темплейт тег а во вьюхе передать все что нужно .
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы