【发布时间】:2018-11-05 18:44:53
【问题描述】:
我正在使用 Django(2.1,python 3.6),我想更改我的项目文件以搜索数据库并将结果返回并显示在 HTML 文件中。搜索很简单,它应该查看模型中的一个字段(包含一个单词)。基于其简单性,这不是一个复杂的查找,我认为 Q 对象是多余的。
到目前为止,我还没有得到返回结果的搜索。我的一般问题是我没有完全掌握这个过程,当我在网上查看时,要么文档在 shell 中显示了它的示例,我找到了一些示例,其中存在一些假设读者知道的缺失信息(例如模型、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 文件中的定义相匹配。 em>
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 %}
如果有人能帮我找出错误,我将不胜感激。
【问题讨论】:
-
为这个应用分享你的 urls.py。
-
@dfundako 问题已更新。
-
我想通了。名称
term必须替换为输入表单的名称。search_term = request.GET['sample_search_box']
标签: django