微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

模板上的对象类型?

如何解决模板上的对象类型?

修改搜索,它不仅搜索页面,还搜索上载的图像和文档。效果很好,但是当我尝试设置搜索页面显示时,我不确定如何使用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 举报,一经查实,本站将立刻删除。