【发布时间】:2021-01-21 17:10:02
【问题描述】:
我正在尝试从 Django 中的表单中获取输入,然后搜索存储并显示任何匹配项,这是我目前拥有的代码。
views.py
def search(request):
input = request.GET.get('q')
return render(request, "encyclopedia/search.html", {
"entry": util.get_entry(input) == None,
"display": util.get_entry(input)
})
search.html
{% extends "encyclopedia/layout.html" %}
{% block title %}
{% endblock %}
{% block body %}
{% if entry %}
<div>No entry found</div>
{% else %}
<div>{{ display }}</div>
{% endif %}
{% endblock %}
layout.html
<div class="row">
<div class="sidebar col-lg-2 col-md-3">
<h2>Wiki</h2>
<form action="{% url 'search' %}" method="get">
<input class="search" type="text" name="q" placeholder="Search Encyclopedia">
<input type="submit">
</form>
<div>
<a href="{% url 'index' %}">Home</a>
</div>
<div>
urls.py
urlpatterns = [
path("", views.index, name="index"),
path("<str:name>", views.entry, name="entry"),
path("search", views.search, name="search")
]
utils.py
def get_entry(title):
"""
Retrieves an encyclopedia entry by its title. If no such
entry exists, the function returns None.
"""
try:
f = default_storage.open(f"entries/{title}.md")
return f.read().decode("utf-8")
except FileNotFoundError:
return None
它可以将您带到搜索页面,但即使条目确实存在,也始终显示未找到条目。
这是我第一个使用 Django 的项目,所以它非常新,我假设我如何将表单输入提供给 util.get_entry() 函数存在问题。
在阅读了 Django 中的表单文档后,我似乎仍然无法找到任何有关如何使其正常工作的参考资料。任何帮助将不胜感激。
经过进一步挖掘,我发现views.py 中的行
input = request.GET.get('q')
每次都为变量分配“搜索”的值,而不是用户表单输入。
【问题讨论】:
-
您能否包含
entry.html的html。如果我能猜一下,我会说它与search.html非常相似? -
我想我知道发生了什么,但我想确定一下。
-
是的,它与 entry.html 完全相同
-
好的,我知道发生了什么