我正在使用Django创建一个项目,该项目包含一个没有提交按钮的表单。我对js一点都不熟悉,所以我查找了如何做。一些答案说我应该这样做
<script>
document.getElementById("search-form").submit();
</script>
但是以这种方式,在我进入此页面并导致404错误后立即自动提交了表单。
我的html
<form action="GET" action="{% url 'blog:search_entry' %}" id="search-form">
<input type="text" name="q" placeholder="Search for posts...">
</form>
views.py
就是这样
def search_entry(request):
query = request.GET.get('q')
entries = Entry.objects.filter(
Q(title__icontains=query) |
Q(description__icontains=query)
)
return render(request, 'blog/search_entry.html', {'entries': entries})
urls.py
path('search_entry/', views.search_entry, name='search_entry'),
我在做什么错?我使用提交按钮顺便成功了。因此urls.py
错误提示
请求的URL:... / entry_list / GET?q =
entry_list
是具有此表单的页面。
答案 0 :(得分:1)
您需要将search_entry视图添加到urls.py。
答案 1 :(得分:1)
在浏览器中加载页面后,页面将被解析并涉及到:
<script>
document.getElementById("search-form").submit();
</script>
JS代码被执行。它会在文档中搜索ID为 search-form 的元素并提交。
因为这种情况是在页面加载后立即发生的,所以用户甚至没有机会与页面进行交互。我看不出这里的意图。
当JS代码提交表单时,页面将重定向到{% url 'blog:search_entry' %}
。
我假设您的url
中没有定义相应的urls.py
,因此返回了HTTP状态代码404(未找到)。
请重新考虑页面的整体设计。检查您的urls.py
以确定错误的来源。
答案 2 :(得分:0)
您似乎想用查询?q =进行搜索。
如果是这种情况,请使用AJAX请求,则表单提交不好。
但是如果不是这种情况:
将您的JavaScript代码包装在JavaScript函数中。
现在通过某些事件(取决于您的要求)侦听器(例如onclick等)调用此函数。