我正在实现一个搜索功能。如果我在每个视图中进行"if 搜索"并在每个页面上呈现它,我可以让它正常工作,但我知道有更好的方法。 我希望搜索提交按钮呈现结果页面。我可以在 URL 中看到搜索请求,但为什么我的搜索函数没有被调用?
我尝试将"action"属性从表单类移动到按钮类再到表单控件类。我尝试用 href 属性替换操作属性。它似乎没有运行我的函数。
path('results/', views.search, name='search'),
def search(request):
print('here!')
eqs = Equipment.objects.all()
locs = Location.objects.all()
if 'search' in request.GET:
search_term = self.request.GET['search']
# searching = Equipment.objects.filter(name__icontains=search_term)
searching = sorted(
chain(eqs, locs)
)
context['search_term'] = search_term
context['searching'] = searching
return render(
request,
'results.html',
context = {
'search_term': search_term,
'searching': searchin,
}
)
<form class="form-inline my-2 my-lg-0" action="{% url 'search' %}">
<input class="form-control mr-sm-2"
type="search"
placeholder="Search"
aria-label="Search"
name="search">
<button class="btn btn-outline-success my-2 my-sm-0 search-button" role="button" type="submit">Search</button>
</form>'''
我没有收到任何错误,正在捕获搜索字段,但我只是停留在页面上,该功能似乎没有运行。
您的表单正在发送POST
,然后您正在尝试从视图中的request.GET
中检索值。您需要向表单添加method="GET"
。
您可以在以下位置了解有关表单数据的更多信息:https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_and_retrieving_form_data#The_GET_method
你可以在:https://docs.djangoproject.com/en/2.2/ref/request-response/#httprequest-objects
编辑:进一步阅读您的问题并查看您的代码。它来自您的提交按钮中有role="button"
。改变这一点,你应该很高兴。这个问题分享了更多信息:我需要在<按钮>上扮演角色="按钮"吗?(不过这也可能是错误的(获取控制台日志或其他内容将非常有帮助。按钮>