【发布时间】:2020-10-28 01:29:24
【问题描述】:
就像这里的许多其他问题(Writing a very basic search form in Django、django search page not found error)一样,我正在使用 Django,并且我有一个表单中的搜索栏,提交时返回“找不到页面”错误。获取正确的网址往往是我的致命弱点,我希望多一双眼睛能发现我的错误。
以下是我的代码节选:
models.py
class Tool(models.Model):
tool_name = models.CharField(max_length=200)
release_date = models.DateField('release_date', null=True, blank=False)
views.py
def search_results(request):
if request.GET:
search_term = request.GET['search_box']
results = Tool.objects.filter(tool_name__icontains=search_term)
return render(request, 'search_results.html', {'results': results})
return render(request, 'search_results.html')
urls.py
urlpatterns = [
...
path('search_results/', views.search_results, name='search_results'),
]
模板/base_generic.html
<form name="search_form" method="GET" action="{ % url 'search_results' %}">
<input id="search_box" type="text" name="search_box" placeholder="Search tools..." >
<button id="search_submit" type="submit" >Submit</button>
</form>
模板/search_results.html
{% extends "base_generic.html" %}
...
{% if results %}
<table style="width:100%">
<tr>
<th>Tool</th>
<th>Release Date</th>
</tr>
{% for t in results %}
<tr>
<td><a href="{% url 'tool-detail' t.tool_name.pk %}">{{ t.tool_name }}</a> </td>
<td>{{ t.release_date }}</p>
</tr>
{% endfor %}
</table>
<hr><p>
{% else %}
<h3 class='error'>Your search term returned no items, please try again.</h3>
{% endif %}
{% endblock %}
文件结构
├── models.py
├── templates
│ ├── base_generic.html
│ ├── index.html
│ ├── packages
│ │ ├── developer_detail.html
│ │ ├── developer_list.html
│ │ ├── publication_detail.html
│ │ ├── publication_list.html
│ │ ├── tool_detail.html
│ │ └── tool_list.html
│ ├── search_results.html
├── urls.py
└── views.py
错误
Page not found (404)
Request Method: GET
Request URL: http://localhost:8000/packages/%7B%20%25%20url%20'search_results'%20%25%7D?search_box=Scampy
Using the URLconf defined in Bio.urls, Django tried these URL patterns, in this order:
admin/
packages/ [name='index']
packages/ tools/ [name='tools']
packages/ tool/<int:pk> [name='tool-detail']
packages/ developers/ [name='developers']
packages/ developer/<int:pk> [name='developer-detail']
packages/ publications/ [name='publications']
packages/ publication/<int:pk> [name='publication-detail']
packages/ new_developer/ [name='new_developer']
packages/ new_tool/ [name='new_tool']
packages/ thanks/ [name='thanks']
packages/ signup/ [name='signup']
packages/ accounts/
packages/ search_list/ [name='search_list']
packages/ search_results/ [name='search_results']
accounts/
^static/(?P<path>.*)$
The current path, packages/{ % url 'search_results' %}, didn't match any of these.
如果有了解我的错误的人可以帮助我,我将不胜感激。
【问题讨论】:
-
问题是
action="{ % url 'search_results' %}">中的大括号和百分号之间的空格。将其更改为action="{% url 'search_results' %}"> -
是的!就是这样,谢谢@Alasdair。如果您想将其放入答案中,我非常乐意接受。
标签: django http-status-code-404 submit