Django在模板中显示搜索结果
我是Django的新手,我想在我的search.html模板中显示搜索结果,但不知何故我错过了路径。。。 我使用上下文处理器全局显示搜索框和类别选择器。因此,对数据库的查询是一组类别和关键字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'
<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">« 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 »</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 }}">«</a></li>
{% else %}
<li class="disabled"><span>«</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 }}">»</a></li>
{% else %}
<li class="disabled"><span>»</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 }}">«</a></li>
{% else %}
<li class="disabled"><span>«</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 }}">»</a></li>
{% else %}
<li class="disabled"><span>»</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当前我根本没有返回任何内容……只是带有页眉和页脚的白色页面。