问题描述
我修改了默认搜索,它不仅搜索页面,还搜索上载的图像和文档。效果很好,但是当我尝试设置搜索页面显示时,我不确定如何使用django标签区分不同的模型类型。该视图将结果编译到search_results上下文中,但是当我尝试迭代并构建HTML时,诸如image或Document对象的pageurl之类的错误。我找不到任何类型的标签来创建If Image然后xxxx elif Document然后xxx类型的方式。如果可能的话,在模板方面进行区分的最佳方法是什么?我是否需要将结果分解为单独的上下文并将其返回?如果返回的结果是Page对象,而不是Image或Document,则此代码将正常工作。
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 %}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)