我在使用继承代码制作功能搜索栏时遇到问题。我在创建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)
答案 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函数