我正在使用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
是具有此表单的页面。
当页面在浏览器中加载时,它会被解析,当涉及到:
<script>
document.getElementById("search-form").submit();
</script>
执行JS代码。它在文档中搜索具有id搜索表单的元素,并提交它。
因为这在页面加载后立即发生,所以用户甚至没有机会与页面进行交互。我没有看到这里的意图是什么。
当JS代码提交表单时,页面将重定向到{% url 'blog:search_entry' %}
。
我假设你的url
中没有定义相应的urls.py
,因此返回HTTP状态代码404(NOT FOUND)。
请重新考虑您网页的整个设计。检查你的urls.py
以确定错误的来源。
您需要将search_entry视图添加到urls.py.
看起来你想用查询搜索一些东西?q =。 如果是这种情况请使用AJAX请求,表单提交不好。
但如果不是这样的话: 将您的JavaScript代码包装在JavaScript函数中。 现在通过某些事件(取决于您的要求)调用此函数,如onclick等。