我正在使用Django(2.1,python 3.6),我想更改项目文件以搜索数据库,并将结果返回并显示在HTML文件中。搜索很简单,它应该查看模型中的一个字段(包含一个单词)。基于其简单性,这并不是一个复杂的查询,我认为Q对象是过大的。
到目前为止,我还没有获得返回结果的搜索。我的一般问题是,我并没有完全掌握流程,当我在线查看时,要么文档在外壳中显示了其示例,要么在示例中找到了一些读者应该知道的缺少信息的示例(例如,模型,URL ,导入的模块,所插入代码的文件名),示例已过时,或者仍然有我忽略的内容。
下面是我对一般过程的理解,但是根据我的看法,我认为urls.py应该在某个地方:
form (base.html) -> view.py -> query (unknown file) -> results in template (search_results.html)
数据库中肯定有数据,但是当我将查询词放入表单中并按submit
时,绝对没有任何反应。这是我的一些代码/文件。
samples / models.py
class Sample(models.Model):
sample_name = models.CharField('Sample', max_length=16)
samples / templates / base_generic.html
<form name="sample_search_form" method="GET" action="{% url 'search' %}">
<input id="sample_search_box" type="text" name="sample_search_box" placeholder="Search samples..." >
<button id="sample_search_submit" type="submit" >Submit</button>
</form>
注意我尝试使用sample_search_list
而不是search
作为URL,但是这在提交时引起了错误,我可以肯定这个词应该与views.py中的定义匹配。文件。
samples / views.py
def search(request):
if request.GET:
search_term = request.GET['term']
results = Sample.objects.filter(sample_name__icontains=search_term)
return render_to_response('samples/sample_search_list.html', {'results': results})
return render_to_response('samples/sample_search_list.html', {})
samples / urls.py
urlpatterns = [
path('', views.index, name='index'),
path('samples/', views.sam, name='sam'),
path('sample/<int:pk>', views.SampleDetailView.as_view(), name='sample-detail'),
path('pi/', views.pi_table, name='pi_table'),
path('pi/<int:pk>', views.pi_view, name='pi-detail'),
path('samples/new', views.pi_new, name='pi_new'),
path('samples/new_sample', views.sample_new, name='sample_new'),
path('samples/', views.var, name='var'),
path('samples/', views.search, name='search'),
]
samples / templates / samples / sample_search_list.html
{% if results %}
{% for result in results %}
{{ result.sample_name }}
{% endfor %}
{% else %}
<h3 class='error'>There was a problem with your input.</h3>
{% endif %}
如果有人可以帮助我确定错误,我将不胜感激。
答案 0 :(得分:0)
我知道了。名称term
必须替换为输入表单的名称。
search_term = request.GET['sample_search_box']