Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django在模板中显示搜索结果_Django_Templates_Search_Display - Fatal编程技术网

Django在模板中显示搜索结果

Django在模板中显示搜索结果,django,templates,search,display,Django,Templates,Search,Display,我是Django的新手,我想在我的search.html模板中显示搜索结果,但不知何故我错过了路径。。。 我使用上下文处理器全局显示搜索框和类别选择器。因此,对数据库的查询是一组类别和关键字 我不确定我是否用正确的方法实现了它 不知道如何在我的模板中显示结果 如何处理view.py中的Catagorie base.py <div class="globalsearch"> <form id="searchform" action="{% url 'search'

我是Django的新手,我想在我的search.html模板中显示搜索结果,但不知何故我错过了路径。。。 我使用上下文处理器全局显示搜索框和类别选择器。因此,对数据库的查询是一组类别和关键字

  • 我不确定我是否用正确的方法实现了它
  • 不知道如何在我的模板中显示结果
  • 如何处理view.py中的Catagorie
  • base.py

    <div class="globalsearch">
            <form id="searchform" action="{% url 'search' %}" method="get" accept-charset="utf-8">
                <label for="{{ categorysearch_form.category.id_for_label }}">In category: </label> {{ categorysearch_form.category }}
                <input class="searchfield" id="searchbox" name="q" type="text" placeholder="Search for ...">
                <button class="searchbutton" type="submit">
                    <i class="fa fa-search"></i>
                </button>
            </form>
        </div>
    
    class globalsearch(ListView):
    
        model = Post
        paginate_by = 10
    
        def get_queryset(self):
            qs = Post.objects.published()
    
            keywords = self.request.GET.get('q')
            if keywords:
                query = SearchQuery(keywords)
                title_vector = SearchVector('title', weight='A')
                content_vector = SearchVector('content', weight='B')
                tag_vector = SearchVector('tag', weight='C')
                vectors = title_vector + content_vector + tag_vector
                qs = qs.annotate(search=vectors).filter(search=query)
                qs = qs.annotate(rank=SearchRank(vectors, query)).order_by('-rank')
    
            return qs
    
    最后,a希望以与我在屏幕上显示结果相同的方式显示结果 post\u list.html:

    {% extends 'quickblog/base.html' %}
    
    {% block content %}
        {% for post in posts %}
            <div class="post">
                <h1><u><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></u></h1>
                <p>{{ post.content|linebreaksbr }}</p>
                <div class="date">
                    <a>Published by: {{ post.author }}</a><br>
                    <a>Published at: {{ post.published_date }}</a><br>
                    <a>Category: {{ post.category }}</a><br>
                    <a>Tag(s): {{ post.tag }}</a>
                </div>
            </div>
        {% endfor %}
    
        <div>
            <span>
             {% if posts.has_previous %}
                <a href="?page=1">&laquo; First <a> |</a></a>
                <a href="?page={{ posts.previous_page_number }}">Previous</a>
            {% endif %}
            {% if posts.has_next %}
                <span> Page {{ posts.number }} of {{ posts.paginator.num_pages }}.</span>
                <a href="?page={{ posts.next_page_number }}">Next<a> |</a></a>
                <a href="?page={{ posts.paginator.num_pages }}">Last &raquo;</a>
            {% endif %}
           </span>
       </div>
    {% endblock %}
    
    {%extends'quickblog/base.html%}
    {%block content%}
    {posts%%中的post为%s}
    {{post.content | linebreaksbr}}

    {%endif%} {%if posts.has_next%} 第{{posts.paginator.num_pages}页中的第{{posts.number}页。 {%endif%} {%endblock%}
    search.html

    {% extends 'quickblog/base.html' %}
    
    {% block content %}
        {% for post in object_list %}
            <div class="post">
                <h1><u><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></u></h1>
                <p>{{ post.content|linebreaksbr }}</p>
                <div class="date">
                    <a>Published by: {{ post.author }}</a><br>
                    <a>Published at: {{ post.published_date }}</a><br>
                    <a>Category: {{ post.category }}</a><br>
                    <a>Tag(s): {{ post.tag }}</a>
                </div>
            </div>
        {% endfor %}
    
    {% if is_paginated %}
        <ul class="pagination">
            {% if page_obj.has_previous %}
                <li><a href="?page={{ page_obj.previous_page_number }}">&laquo;</a></li>
            {% else %}
                <li class="disabled"><span>&laquo;</span></li>
            {% endif %}
            {% for i in paginator.page_range %}
                {% if page_obj.number == i %}
                    <li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>
                {% else %}
                    <li><a href="?page={{ i }}">{{ i }}</a></li>
                {% endif %}
            {% endfor %}
            {% if page_obj.has_next %}
                <li><a href="?page={{ page_obj.next_page_number }}">&raquo;</a></li>
            {% else %}
                <li class="disabled"><span>&raquo;</span></li>
            {% endif %}
        </ul>
    {% endif %}
    {% endblock %}
    
    {%extends'quickblog/base.html%}
    {%block content%}
    {%用于对象中的post_列表%}
    {{post.content | linebreaksbr}}

    {%else%}
  • « {%endif%} {paginator.page_range%} {%如果页码=i%}
  • {{i}(当前)
  • {%else%}
  • {%endif%} {%endfor%} {%如果页面_obj.has_next%}
  • {%else%}
  • » {%endif%} {%endif%} {%endblock%}
  • 默认情况下,将查询集作为
    对象列表添加到上下文中
    ,因此只需在对象列表%}中对obj执行
    {%for%}
    即可在
    post\u list.html中对其进行迭代

    你的模板看起来像

    {% extends 'quickblog/base.html' %}
    
    {% block content %}
        {% for post in object_list %}
            <div class="post">
                <h1><u><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></u></h1>
                <p>{{ post.content|linebreaksbr }}</p>
                <div class="date">
                    <a>Published by: {{ post.author }}</a><br>
                    <a>Published at: {{ post.published_date }}</a><br>
                    <a>Category: {{ post.category }}</a><br>
                    <a>Tag(s): {{ post.tag }}</a>
                </div>
            </div>
        {% endfor %}
    
    {% if is_paginated %}
      <ul class="pagination">
        {% if page_obj.has_previous %}
          <li><a href="?page={{ page_obj.previous_page_number }}">&laquo;</a></li>
        {% else %}
          <li class="disabled"><span>&laquo;</span></li>
        {% endif %}
        {% for i in paginator.page_range %}
          {% if page_obj.number == i %}
            <li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>
          {% else %}
            <li><a href="?page={{ i }}">{{ i }}</a></li>
          {% endif %}
        {% endfor %}
        {% if page_obj.has_next %}
          <li><a href="?page={{ page_obj.next_page_number }}">&raquo;</a></li>
        {% else %}
          <li class="disabled"><span>&raquo;</span></li>
        {% endif %}
      </ul>
    {% endif %}
    
    {%extends'quickblog/base.html%}
    {%block content%}
    {%用于对象中的post_列表%}
    {{post.content | linebreaksbr}}

    {%else%}
  • « {%endif%} {paginator.page_range%} {%如果页码=i%}
  • {{i}(当前)
  • {%else%}
  • {%endif%} {%endfor%} {%如果页面_obj.has_next%}
  • {%else%}
  • » {%endif%} {%endif%}

  • 您可以通过在视图中定义
    context\u object\u name
    来更改上下文变量名。e、 g.
    context\u object\u name='posts'

    我仍然得到一个空的回复:(你能不能快速看一下:那里的模板仍然在做
    {%forpost-in-posts%}
    不更改上下文变量名称。打印/调试
    get\u queryset
    以确保
    qs
    包含某些内容?我已经实现了所有更改,但仍然只获取页脚和页眉:(视图/结果的实际内容丢失。@Venom是的,但在您的视图中,您的查询集是否确实从数据库中返回了任何内容?@markwalker_u1当前我根本没有返回任何内容……只是带有页眉和页脚的白色页面。