Тип объекта "Трясогузка" в шаблоне?
Я изменил поиск по умолчанию, в котором выполняется поиск по страницам, но также загружены изображения и документы. Это работает нормально, однако, когда я пытаюсь настроить отображение страницы поиска, я не уверен, как различать разные типы моделей с помощью тегов django. Представление компилирует результаты в контекст search_results, но когда я пытаюсь выполнить итерацию и построить HTML, такие вещи, как pageurl, выдадут ошибку для объекта Image или Document. Мне не удалось найти какой-либо тег типа для создания образа If Image, затем xxxx elif Document, затем типа xxx. Как лучше всего различать на стороне шаблона, если это возможно, или нужно ли мне разбивать результаты на отдельные контексты и возвращать их? Этот код будет работать нормально, если возвращенные результаты являются объектом страницы, но не изображением или документом.
def search(request):
search_query = request.GET.get('query', None)
page = request.GET.get('page', 1)
# Search
if search_query:
page_results = Page.objects.live().search(search_query)
doc_results = Document.objects.all().search(search_query)
img_results = Image.objects.all().search(search_query)
search_results = list(chain(page_results, doc_results, img_results))
query = Query.get(search_query)
# Record hit
query.add_hit()
else:
search_results = Page.objects.none()
# Pagination
paginator = Paginator(search_results, 10)
try:
search_results = paginator.page(page)
except PageNotAnInteger:
search_results = paginator.page(1)
except EmptyPage:
search_results = paginator.page(paginator.num_pages)
return TemplateResponse(request, 'search/search.html', {
'search_query': search_query,
'search_results': search_results,
})
#Snip from template
{% if search_results %}
{{ search_results|length }} results found.
{% for result in search_results %}
<h4><a href="{% pageurl result %}">{{ result }}</a></h4>
Author: {{ result.specific.owner.get_full_name }}<br>
Publish Date: {{ result.specific.last_published_at}}
{% endfor %}
{% if search_results.has_previous %}
<a href="{% url 'search' %}?query={{ search_query|urlencode }}&page={{ search_results.previous_page_number }}">Previous</a>
{% endif %}
{% if search_results.has_next %}
<a href="{% url 'search' %}?query={{ search_query|urlencode }}&page={{ search_results.next_page_number }}">Next</a>
{% endif %}
{% elif search_query %}
No results found
{% endif %}