模板上的对象类型?

问题描述

修改搜索,它不仅搜索页面,还搜索上载的图像和文档。效果很好,但是当我尝试设置搜索页面显示时,我不确定如何使用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 }}&amp;page={{ search_results.prevIoUs_page_number }}">PrevIoUs</a>
        {% endif %}

        {% if search_results.has_next %}
            <a href="{% url 'search' %}?query={{ search_query|urlencode }}&amp;page={{ search_results.next_page_number }}">Next</a>
        {% endif %}
    {% elif search_query %}
        No results found
    {% endif %}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)