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

时间:2018-08-14 09:25:10

标签: javascript python django

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

3 个答案:

答案 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等)调用此函数。