Как я выполняю запрос, просачивающийся django шаблоны

73
задан Paco 8 September 2013 в 00:01
поделиться

2 ответа

Вы не можете сделать этого, которое является дизайном. Авторы платформы Django предназначили строгое разделение кода представления от логики данных. Фильтрация моделей является логикой данных, и HTML вывода является логикой представления.

, Таким образом, у Вас есть несколько опций. Самое легкое должно сделать фильтрацию, затем передать результат render_to_response. Или Вы могли записать метод в своей модели так, чтобы можно было сказать {% for object in data.filtered_set %}. Наконец, Вы могли записать свой собственный тег шаблона, хотя в этом конкретном случае я отговорю от этого.

113
ответ дан Eli Courtwright 24 November 2019 в 12:14
поделиться

Я сталкиваюсь с этой проблемой регулярно и часто использую, "добавьте метод" решение. Однако существуют определенно случаи, где, "добавляют, метод" или "вычисляет его в представлении", не работают (или не работайте хорошо). Например, когда Вы кэшируете шаблонные фрагменты и нуждаетесь в некотором нетривиальном вычислении DB для создания его. Вы не хотите делать работу DB, если Вы не должны будете, но Вы не будете знать, нужно ли Вам к тому, пока Вы не глубоки в шаблонной логике.

Некоторые другие возможные решения:

  1. Использование {% expr < выражение> как < var_name> %} тег шаблона, найденный в http://www.djangosnippets.org/snippets/9/ выражение, является любым легальным выражением Python с Контекстом Вашего шаблона как Ваш локальный объем.

  2. Изменение Ваш шаблонный процессор. Jinja2 ( http://jinja.pocoo.org/2/ ) имеет синтаксис, который почти идентичен шаблонному языку Django, но с полным доступным питанием Python. Это также быстрее. Можно сделать эту оптовую торговлю, или Вы могли бы ограничить ее использование шаблонами, что Вы продолжаете работать, но используете "более безопасные" шаблоны Django для сохраняемых разработчиками страниц.

11
ответ дан Peter Rowell 24 November 2019 в 12:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: