Django,创建功能搜索栏和搜索结果页面

时间:2017-08-25 20:35:50

标签: python html django

我在使用继承代码制作功能搜索栏时遇到问题。我在创建search_results页面时遇到了最大麻烦。

我将我的search_results页面剥离为只有一行。 search_results.html <div>You searched for {{ query }}</div>但是现在,search_results页面无法呈现{{query}}。没有出现用户先前输入的文本。显示在该页面上的所有内容都是“您搜索过的”

searchbox.html

<form class="search" action="{% url 'search' %}" method='post'>
  {% csrf_token %}
  <input type="search" placeholder="Search here..." name="usr_query" 
      value='{{ query }}' required>
  <button type="submit">Search</button>
</form>

views.py

def search(request):
  query = request.POST['usr_query']
  print "QUERY: "
  print query
  t = loader.get_template('gtr_site/test_search_results.html')
  c = Context({ 'query': query,})
  return HttpResponse(t.render(c))

我有点谨慎并添加了“打印”声明......它确实打印出用户在搜索栏中输入的内容。但是我的search_results页面上没有生成。

这是什么原因?

编辑:

添加 urls.py

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^about/$', views.about, name='about'),
    url(r'^contact/$', views.contact, name='contact'),
    url(r'^search_engine/$', views.statement_search_engine, name='statement-search') # <- url for searchbox.html,
    url(r'^test_search_results/$', views.search, name='test-search'), # <- url for searchresults.
    url(r'^(?P<statement_id>.+)/$', views.statement_page, name='statement'),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

2 个答案:

答案 0 :(得分:0)

value='{{ request.GET.usr_query }}'更改为value="{{ query }}"

现在你强迫它显示GET参数。这适用于初始页面加载(通常是GET),但此时您还没有进行任何搜索。你提交搜索(在我看来是正确的,但它是有争议的)作为POST。搜索功能使用POST参数并在上下文中返回query,这是正确的。但是,然后显示usr_query的GET值 - 此时此时不存在,因为该页面现在是一个POSTed页面。更改value=,它应该有效。

答案 1 :(得分:0)

简短回答:

似乎这样滑倒了:

c = Context({ 'query': query,})

这是在views.py中。 Context()不会导致任何错误消息,但是......为了获得我需要的功能,我所要做的就是删除此功能并使c变量成为常规字典。< / p>

由于此stackoverflow问题Writing a very basic search form in Django

,我包含了Context函数