Объединение двух запросов в тег шаблона

У меня две модели news.article и portfolio.entry. Обе модели имеют BooleanField для установки «is_campaign» в true.

Я пытаюсь написать собственный шаблонный шаблон, чтобы я мог получить последнюю статью кампании (там должно быть только одно)

Вот мой templatetag: campaign_article.py

from itertools import chain from django import template from news.models import Article from portfolio.models import Entry register = template.Library() def get_campaign(): #Get the newest news article with is_campaign=True article = Article.objects.filter(is_campaign=True).order_by('-pub_date')[:1] #Get the newest portfolio entry with is_campaign=True portfolio = Portfolio_entry.objects.filter(is_campaign=True).order_by('-pub_date')[:1] #combine article, and entry and display only the newest campaign_article = list(chain(article, portfolio))[:1] return {'campaign_article': campaign_article} register.tag('campaign', get_campaign) 

Я пробовал это в своем шаблоне:

 {% load campaign_article %} {% for campaign_article in campaign %} {{ campaign_article.id }} {% endfor %} 

Но я ничего не получаю. Это неправильный метод?

2 Solutions collect form web for “Объединение двух запросов в тег шаблона”

Вы бы хотели создать assignment_tag а не общий тег. Таким образом, вы можете обновить свой тег следующим образом:

 def get_campaign(): #your stuff .... return campaign_article register.assignment_tag(get_campaign, name='campaign') 

И обновите шаблон как:

 {% load campaign_article %} {% campaign as campaign_list %} {# loads the tags and creates campaign_list context variable #} {% for campaign_article in campaign_list %} {{ campaign_article.id }} {% endfor %} 

Вам не нужно создавать тег шаблона, чтобы делать то, что вы хотите. Читайте о процессоре контекста :

 def get_campaign(request): # this is your context processor # ... return {'campaign_article': campaign_article} 

На ваш взгляд:

 def some_view(request): # ... c = RequestContext(request, { 'foo': 'bar', }, [get_campaign]) # attach your context processor to template context return HttpResponse(t.render(c)) 

UPD: если вам нужно отобразить данные на каждой странице, вы можете зарегистрировать свой процессор контекста как глобальный в своем файле настроек. См. Настройки шаблонов контекстных шаблонов .

 TEMPLATE_CONTEXT_PROCESSORS = (..., "myapp.context_processors.get_campaign") 

Django автоматически добавит переменную campaign_article к каждому рендерингу шаблонов.

  • Использование индекса из итерированного списка
  • Выберите несколько полей с одной группой в django
  • Настройка Django Admin
  • Django: как вы обслуживаете медиа / таблицы стилей и ссылаетесь на них в шаблонах?
  • django сортирует элементы запроса еженедельно ежемесячно ежедневно
  • В администраторе Django, как я могу скрыть кнопки «Сохранить и продолжить» и «Сохранить и добавить еще» в администраторе модели?
  • На сегодняшний день ISO-система Jango templatetags
  • Как отобразить объект изображения PIL в шаблоне?
  • как отображать только часть html с данными с помощью django
  • Как создать поле пароля в модели django
  • Как изменить выходной формат django datetime?
  •  
    Interesting Posts for Van-Lav

    Как выровнять лицо в позицию в мировом пространстве?

    Как вы одновременно играете два разных файла песни на python?

    Ошибка подпроцесса Python.Popen () (Нет такого файла или каталога)

    Изменение регистра (верхний / нижний) при добавлении данных через админ-сайт Django

    Код Python для отправки команды через командную строку

    Создайте граф зависимостей в python

    Найти подстроку в строке, но только целые слова?

    Django admin – сортировка по полю GenericForeignKey

    Как избежать глобальных переменных

    Правильный способ попробовать / кроме использования модуля запросов Python?

    Сортировка вложенного словаря по значению и остаток по другому значению в Python

    Именованные каналы между C # и Python

    Можно ли запросить QQbject PyQt4, чтобы определить, был ли поврежден основной экземпляр C ++?

    Анализ Python – Sentiment с использованием Pointwise Mutual Information

    Изменение активного класса ссылки с помощью twitter bootstrap css в python / flask

    Python - лучший язык программирования в мире.