我目前正在学习Django,作为练习,我编写了一个简单的模型,一个视图和几个模板。我的应用程序的目的是查询我的数据库中包含其标题中特定术语的书籍。领域。我写了一本书'同样的模型,一个查看功能,使用' Book'模型并将结果返回到模板' search-results.html'。查询字词从HTML表单传递。我可以从'请求'中接收查询字符串。对象,但当我查询' Book'结果模型,我得到一个空列表。我试过查询“书”。来自python shell的模型,它工作得很好。为什么我的视图功能没有得到任何结果?以下是我的视图函数中的代码:
def search(request):
if 'q' in request.GET and request.GET['q']:
q = request.GET['q']
books = Book.objects.filter(title__icontains=q)
return render(request,'search-results.html',{'results':books,'query':q})
else:
message = 'You submitted an empty form'
return HttpResponse(message)
以下是我的搜索表单的代码:
<form action='/search/' method='get'>
<input type='text' name='q'>
<input type='submit' value='Search'>
</form>
我使用的查询词是&#39; Django&#39;。以下是表格数据:
mysql> select * from books_book;
+----+-----------------+--------------+-----------------+
| id | title | publisher_id | publicationDate |
+----+-----------------+--------------+-----------------+
| 1 | Learning Python | 1 | 2014-09-02 |
| 2 | Learning Django | 2 | 2014-09-28 |
+----+-----------------+--------------+-----------------+
2 rows in set (0.00 sec)
以下是结果模板:
<body>
<p>
The following are the {{books|length}} results for the search term {{query}}:
{% for book in books %}
<li>{{book.title}}</li>
{% endfor %}
</p>
</body>
我正在使用Django 1.6和Python 2.7.8,MySQL 5.6
谢谢你, 勒凯什。
答案 0 :(得分:2)
您在模板中查询books
,而在将传递给视图中的模板时,您将变量命名为results
。
在您的模板中尝试迭代results
而不是books
:
{% for book in results %}
<li>{{book.title}}</li>
{% endfor %}
会导致:
<body>
<p>
The following are the {{results|length}} results for the search term {{query}}:
{% for book in results %}
<li>{{book.title}}</li>
{% endfor %}
</p>
</body>
答案 1 :(得分:0)
您调用了包含图书&#34;结果&#34;的上下文变量,但在模板中您正在迭代&#34;图书&#34;。选择一个并保持一致。