有一个显示要素列表的页面。在此页面上还有一个按值搜索的页面。当我输入一个值时,此页面仅显示具有该值的要素。
我需要让页面默认只显示搜索结果。而且只有在查询之后,页面才会显示输入值的元素。怎么做?home.html
<div class="headtext">
<form method="GET" action="{% url 'search' %}">
<input type="search" type="text" name="q" prequired placeholder="Put appnumber">
<button type="submit">Find</button>
</form>
</div>
<div>
{% for application in object_list %}
<div>
<p>Application: {{ application.appnumber }}, status: {{ application.status }}</p>
</div>
{% endfor %}
</div>
urls.py
from django.urls import path
from .views import HomeView, Search
urlpatterns = [
path('', HomeView.as_view(), name="home"),
path('search/', Search.as_view(), name="search"),
views.py
class HomeView(ListView):
model = Application
template_name = 'home.html'
class Search(ListView):
template_name = 'home.html'
def get_queryset(self):
return Application.objects.filter(appnumber__icontains=self.request.GET.get("q"))
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(*args, **kwargs)
context["q"] = self.request.GET.get("q")
return context
2条答案
按热度按时间6kkfgxo01#
只需检查
object_list
上下文变量是否存在:编辑:我没有注意到
HomeView
也是ListView
的子类,修改为:ncecgwcz2#
你可以有一个从request中获取'q'并返回它或None的方法,然后你的get_queryset可以使用这个参数返回你需要的对象列表。
像这样的东西应该管用