python - 如何处理通过django中的表单传递的空输入?
问题描述
我正在做我的第一个 django 项目,但遇到了一个我找不到任何可行解决方案的问题。所以,我正在尝试创建一个电子商务网站。我创建了一个基本的搜索栏,并尝试渲染与输入匹配的所有内容。问题发生在其中一种边缘情况。如果我发送一个空输入,则会引发以下错误:
Exception Value:
The view mainpages.views.search didn't return an HttpResponse object. It returned None instead.
我试图处理这个问题,但我失败了。我一直在寻找答案,但没有成功。我真诚地感谢你的时间!
代码:views.py
def search(request):
if request.method == 'GET' and 'q' in request.GET:
query = request.GET.get('q')
try:
if query:
objects_list= ComputerScienceProducts.objects.filter(
Q(name__icontains=query)
)
if list(objects_list) is None:
return render(request, 'search_error.html')
else:
return render(request, 'search_result.html', {"objects_list": objects_list})
except:
return render(request, 'search_error.html')
else:
return render(request, 'search_error.html')
模板:
{% block cont2 %}
<div class="background"></div>
<div class="inp">
<form action="{% url 'search_results' %}" method="get">
{% csrf_token %}
<label>
<i class="bi bi-search" style="position: absolute; margin-left: 15px;margin-top: 13px;"></i>
<input type="text" placeholder="What are you looking for?" class="search" name="q">
</label>
</form>
</div>
<div class="container" style="margin-top: 20px;">
{% endblock %}
{% block content %}
{% if objects_list %}
{% for prod in objects_list %}
<div class="card" id="cardDisplay">
<img class="card-img-top" src="{{ prod.img.url }}" alt="Card image" id="image_prod">
<div class="card-body">
<h4 class="card-title"> {{ prod.name }}</h4>
<p class="card-text">Price: {{ prod.price }} lei <br>
<a href="{% url 'prod_details' prod.pk %}" class="card-text">Details</a></p>
<button type="submit" class="btn btn-primary">Add to chart</button>
</div>
</div>
{% endfor%}
{% else %}
<p class="updt"> No item has been matched to your search</p>
{% endif %}
</div>
{% endblock %}
解决方案
这将返回所有项目...
def search(request):
if request.method == 'GET' and 'q' in request.GET:
query = request.GET.get('q')
if query is None:
query = ""
.....
或者
此返回错误页面..
def search(request):
if request.method == 'GET' and 'q' in request.GET:
query = request.GET.get('q')
try:
if query:
objects_list= ComputerScienceProducts.objects.filter(
Q(name__icontains=query)
)
if list(objects_list) is None:
return render(request, 'search_error.html')
else:
return render(request, 'search_result.html', {"objects_list": objects_list})
➡➡else:
➡➡return render(request, 'search_error.html')
except:
return render(request, 'search_error.html')
else:
return render(request, 'search_error.html')
推荐阅读
- jupyter-notebook - 如何使用 if 和 else 选项在 Markdown 中编写函数
- c - 为什么运行“插入”功能后我的数字变量会发生变化?
- haskell - Haskell TypeSynonymInstances 实例声明
- excel - 如何使用 VBA 自动将单词添加到多列中的文本末尾?
- c - 如何使用 fscanf 从文件中读取 2 种不同的数据类型?
- python - 如何跨子行和子列聚合熊猫数据透视表
- linear-programming - 使用 split 命令拆分字符串
- amazon-dynamodb - AWS Scan on DynamoDB 条件表达式选项
- laravel - Laravel 条带集成
- django - 如何在 django 网站中使用 ajax 添加评论?