Django:没有提交按钮的表单导致404错误

问题描述 投票:0回答:3

我正在使用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是具有此表单的页面。

javascript python django
3个回答
1
投票

当页面在浏览器中加载时,它会被解析,当涉及到:

<script>
    document.getElementById("search-form").submit();
</script>

执行JS代码。它在文档中搜索具有id搜索表单的元素,并提交它。

因为这在页面加载后立即发生,所以用户甚至没有机会与页面进行交互。我没有看到这里的意图是什么。

当JS代码提交表单时,页面将重定向到{% url 'blog:search_entry' %}

我假设你的url中没有定义相应的urls.py,因此返回HTTP状态代码404(NOT FOUND)。

请重新考虑您网页的整个设计。检查你的urls.py以确定错误的来源。


1
投票

您需要将search_entry视图添加到urls.py.


0
投票

看起来你想用查询搜索一些东西?q =。 如果是这种情况请使用AJAX请求,表单提交不好。

但如果不是这样的话: 将您的JavaScript代码包装在JavaScript函数中。 现在通过某些事件(取决于您的要求)调用此函数,如onclick等。

© www.soinside.com 2019 - 2024. All rights reserved.