Отображение фреймворка message.error DJANGO - PullRequest
0 голосов
/ 10 ноября 2019

Я создаю приложение, когда пользователь может искать рецепты, вводя некоторые ингредиенты в поле поиска.

Я хотел бы сделать это, когда поле поиска пусто или строка пуста, пользователь получает ошибку.message "Пожалуйста, введите данные."Но после того, как я реализовал 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 %}

1 Ответ

1 голос
/ 10 ноября 2019

Если термин запроса отсутствует, вы в настоящее время перенаправляете на:

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чтобы получить аргумент сообщения:

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

И, наконец, ваш URL должен включать необязательный аргумент сообщения:

path('drink_list/', views.drink_list,name='drink_list'),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...