Python 用Django实现搜索表单
大家好,我的社区 我的表格不能用Django呈现,有问题 下面是我在Python 用Django实现搜索表单,python,django,Python,Django,大家好,我的社区 我的表格不能用Django呈现,有问题 下面是我在views.py中呈现空表单的尝试 类搜索站点(forms.Form): query=forms.CharField(label=“New Item”, help_text=“搜索网站上的任何文章。”) def搜索(请求): 表单=搜索站点() 上下文={ “形式”:形式, “查询匹配”:查询匹配 } 响应=呈现(请求,“encyclopedia/layout.html”,上下文) 返回响应 下面是我的url.py文件的外
views.py
中呈现空表单的尝试
类搜索站点(forms.Form):
query=forms.CharField(label=“New Item”,
help_text=“搜索网站上的任何文章。”)
def搜索(请求):
表单=搜索站点()
上下文={
“形式”:形式,
“查询匹配”:查询匹配
}
响应=呈现(请求,“encyclopedia/layout.html”,上下文)
返回响应
下面是我的url.py
文件的外观:
urlpatterns=[
路径(“,views.index,name=“index”),
路径(“wiki/”,views.page,name=“wiki”),
路径(“wiki/”,views.search,name=“site\u search”)
]
我的layout.html
文件:
{%load static%}
{%block title%}{%endblock%}
维基
{%csrf_令牌%}
这里应该有东西
{{form}}
创建新页面
随机页面
{%block nav%}
{%endblock%}
{%block body%}
{%endblock%}
我注意到上面截图中有两个特别的问题。首先,我的表单在index.html
网页中不呈现,该网页扩展了layout.html
。其次,当我点击submit按钮时,我会被发送到一个在url中有我的CSRF令牌的网页。。。然后最后呈现我的表单
我怎样才能解决这个问题?谢谢大家
我注意到上面截图中有两个特别的问题。首先,
我的表单在我的index.html
网页中不呈现,这
扩展layout.html
对。您没有将表单
传递到index.html
。在呈现主页的视图中传递。即使它是从layout.html
扩展而来,也需要在上下文中传递它才能工作
def索引(请求):
#你的密码。
返回呈现(请求'index.html',{'form':SearchSite()})
第二,当我点击提交按钮时,我会被发送到一个网页
在url中有我的CSRF令牌。。。最后,我的
形式
这是因为,在
index.html
中,有一个空白表单,带有csrf\u标记
,其操作设置为/wiki
,按下提交按钮时调用搜索
。而search
将为您提供layout.html
,以及表单,由于表单方法是GET
,它将在url中显示它。如果有机密数据,我建议将其更改为POST
(甚至其他。如果不是POST请求,为什么会有csrf\u令牌
?不需要。如果您确实想要GET请求,那么请删除csrf\u令牌
)。这是我之前为将来访问该帖子的人提出的问题的解决方案
我编写了一个名为SearchSite
的表单,并在我的views.py
中定义了一个名为search
的视图
类搜索站点(forms.Form):
query=forms.CharField(
help_text=“搜索网站上的任何文章。”)
def搜索(请求):
表单=搜索站点()
是\u查询的\u子字符串\u=[]
如果request.method==“GET”:
表单=搜索站点(request.GET)
如果form.is_有效():
对于util.list_entries()中的条目:
ExistSideEnticalResult=form.cleaned_数据[“查询”].casefold()==entry.casefold()
existsResult=entry.casefold()中的form.cleaned_data[“query”].casefold()
如果存在实体结果:
返回HttpResponseRedirect(反向(“wiki”),
kwargs={“页面标题:条目}”)
elif现有结果:
是\u查询的\u子字符串\u.append(条目)
上下文={
“表单”:SearchSite(),
“is_substring_of_查询”:is_substring_of_查询
}
response=render(请求,“百科全书/search.html”,上下文)
返回响应
当请求myview.search
时,它将发送一个空表单的响应(如果通过index.html
访问,或者如果没有结果,则会显示一条消息说没有结果),空表单和作为标记项的子字符串的所有查询,或者如果查询匹配,则将客户端路由到精确的项
以下是迄今为止我的url.py
中的路由:
urlpatterns=[
路径(“,views.index,name=“index”),
路径(“wiki/”,views.page,name=“wiki”),
路径(“search/”,views.search,name=“site\u search”)
]
在我的layout.html
中,我有以下表格:
{{form}}
以及my search.html中作为标记项子字符串的查询:
{%if是\u查询%的\u子字符串\u}
搜索结果
{for query中的查询%is\U substring\U of\U QUERES%}
{%endfor%}
{%else%}
没有结果!再试一次。
{%endif%}
如果有任何错误,请告诉我。我认为这与/route调用views.index函数有关,而不是views.search函数,因此它永远不会在主页上显示表单。谢谢。拥有csrf_代币是一个愚蠢的错误。所以澄清一下,如果我计划使用我的搜索将我重定向到搜索页面,我应该使用get,因为没有机密数据?获取请求