Django救命!带有方法post的表单没有正确调用带有django-url标签的操作,需要帮助理解为什么这不起作用



尝试使用方法="创建一个简单的搜索表单时;POST";链接到一个url的操作应该触发一个视图来呈现一个不同的模板。我遇到它不起作用,它所做的只是在csrf上标记到我的索引url,就像我在使用GET而不是POST一样?

HTML网址:

http://127.0.0.1:8000/bugtracker/?csrfmiddlewaretoken=jdGcvGb8pioQutLhDOL8y6zbK7DW6XSErTYQ8zHOI8W1fAXf8V6NFoFmzXRIvC3d&searched=

视图:

@login_required(login_url='login_register')
def search_site(request):
if request.method == "POST":
searched = request.POST['searched']
context = {
'searched': searched
}
return render(request, 'bugs/search_site.html', context)
else:
return render(request, 'bugs/search_site.html')

网址:

path('search_site/', views.search_site, name='search_site'),

搜索栏模板:

<div class="input-group">
<form method="POST" action="{% url 'search_site' %}">
{% csrf_token %}
<input class="form-control" type="search" placeholder="Search for..." aria-label="Search for..." name="searched">
<button class="btn btn-primary" type="submit"><i class="fas fa-search"></i></button>
</form>
</div>

搜索结果模板:

{% extends 'bugs/base.html' %}
{% block content %}
<div class="container-fluid px-4">
{% if searched %}
<h4 class="mt-4">results for {{ searched }}</h4>
{% endif %}
</div>
{% endblock %}

我尝试过改变方法来获得,我尝试过更改我的url和我的视图,但都无济于事。删除crf只会使url标签成为一个?在索引中,它似乎根本没有调用任何内容。

我可以提供两个建议,第一个是在else条件之外进行渲染,第二个是通过打印来查看searched是否有任何值。

@login_required(login_url='login_register')
def search_site(request):
if request.method == "POST":
searched = request.POST['searched']
print(f"searched value --> {searched}")
context = {
'searched': searched
}
return render(request, 'bugs/search_site.html', context)
return render(request, 'bugs/search_site.html')

搜索结果模板:

{% extends 'bugs/base.html' %}
{% block content %}
<div class="container-fluid px-4">
{% if searched %}
<h4 class="mt-4">results for {{ searched }}</h4>
{% else %}
<p>No value has come.</p>
{% endif %}
</div>
{% endblock %}

我还认为它应该是POST中的另一个模板方法检查一下,你提供的search_site.html可能是类似search_result.html的东西。

最新更新