显示框架message.error DJANGO

当用户可以通过在搜索字段中输入一些成分来搜索食谱时,我正在创建一个应用程序。

我想这样做,当搜索字段为空或字符串为空时,用户会收到error.message'Please put input。'。但是,当我在视图和模板中实现了message.error之后,它只会返回没有此信息“请输入”的同一页面。你知道我在这里弄错了吗?

我的观点:

from django.shortcuts import render
from django.db.models import Q #new

from .models import Recipe
from .models import Ingredient

from django.contrib import messages
from django.shortcuts import redirect

def drink_list(request):
    template = "drinks/drink_list.html"
    return render(request,template)

def search_results(besos):

    query = besos.GET.get('q')

    if not query or query == ' ' or query == '  ' or query == '   ':
        messages.error(besos,"Please put input")
        return redirect('drink_list')

    else:
        q = Q()
        for queries in query.split():
            q |= (Q(ingredients__ingredient_name__icontains=queries))
            #why it look for 'sok z cytryny' and show as well sok z limonki
        results = Recipe.objects.filter(q)
        template = "drinks/search_results.html"
        context = {
        'results' : results,}
        return render(besos,template,context)

我的模板search_results:

{% if results %}
  {% for drink in results %}
    <div>
      <p>{{ drink.recipe_name }}</p>
      <p>Preparation: {{ drink.preparation }}</p>
      <p>Ingredients:
        {% for ingredient in drink.ingredients.all %}
          {{ingredient.ingredient_name}}{% if not forloop.last %},{% endif %}
        {% endfor %}
      </p>
    </div>
  {% endfor %}

{% elif messages %}
<ul class="messages">
  {% for message in messages %}
  <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
  {% endfor %}
</ul>
{% else %}
  <div>Such ingredients do not exist</div>
{% endif %}
as3861701 回答:显示框架message.error DJANGO

如果没有查询词,则您当前正在重定向到:

return redirect('drink_list')

,但是您没有将消息传递到drink_list视图。 如果进行重定向,则可以将消息字符串作为参数传递

return redirect('{}?message=Please put input'.format(reverse('drink_list)))

然后,您的drink_list模板必须包括:

<ul class="messages">
  <li>{{ message }}</li>
</ul>

您需要进一步修改drink_list函数以获取message参数:

def drink_list(request):
    template = "drinks/drink_list.html"
    message = request.GET.get('message',''))
    return render(request,template,message=message)

最后,您的网址必须包含可选的message参数:

path('drink_list/',views.drink_list,name='drink_list'),
本文链接:https://www.f2er.com/3129119.html

大家都在问