【问题标题】:How to handle an empty input passed through a form in django?如何处理通过django中的表单传递的空输入?
【发布时间】:2021-02-21 19:35:28
【问题描述】:

我正在处理我的第一个 django 项目,但遇到了一个我找不到任何可行解决方案的问题。 所以,我正在尝试创建一个电子商务网站。我创建了一个基本的搜索栏,并尝试渲染与输入匹配的所有内容。问题发生在其中一种边缘情况。如果我发送一个空输入,则会引发以下错误:

Exception Value:    
The view mainpages.views.search didn't return an HttpResponse object. It returned None instead.

我试图解决这个问题,但我失败了。我一直在寻找答案,但没有成功。衷心感谢您的宝贵时间!

代码: 视图.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 %}

【问题讨论】:

    标签: python django search django-views django-forms


    【解决方案1】:

    这将返回所有项目...

    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')
    

    【讨论】:

      猜你喜欢
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多