отображать список на основе условного оператора просмотра списка в представлениях django, используя тот же шаблон - PullRequest
1 голос
/ 03 июня 2019

Я хочу отобразить список запросов, основанных на интересующем фрукте.поэтому я написал список с условием, что он должен отображать список, который включает манго, в противном случае он должен отображать список, который включает банан.поэтому, когда я отображаю шаблон, шаблон должен проверить, отображает ли его mango_list или banana_list.but только mango_list.оператор else в представлениях не работает

я написал условное выражение в представлениях для отображения mango_list, если в качестве контекста используется mango_list, иначе отобразить banana_list.И поместите условие в шаблон.

Вот мой код ниже

views.py

def fruit_list_view(request):
    mango_list = Request.objects.filter(taste__icontains='mango')
    banana_list = Request.objects.filter(taste__icontains='banana')
    context ={
        'mango_list': mango_list,
        'banana_list': banana_list,
        }
    if mango_list in context.values():
        return render(request,"frCat_list.html",context={'mango_list': mango_list})
    else:
        return render(request,"frCat_list.html",context={'banana_list': banana_list})

url.py

urlpatterns = [

    path('', views.index, name='index'),
    path('mango_list/', views.fruit_list_view, name='mango_list'),
    path('banana_list/', views.fruit_list_view, name='banana_list'),
]

файл шаблона(имя шаблона - frCat_list.html)

{% extends 'base_generic.html' %}
{% load static %}
{% block content %}


<body>
{% if mango_list %}
    {% for request in mango_list %}
  <tbody> 

      <td><a href="{% url 'request-detail' request.id %}">{{request.id}}</a></td>
      <td>{{request.price}}</td>
      <td>{{request.size}}</td>
      <td>{{request.comment}}</td>

  </tbody>
  {% endfor %}
  </table>
{% elif banana_list %}
    {% for request in banana_list %}
  <tbody> 

      <td><a href="{% url 'request-detail' request.id %}">{{request.id}}</a></td>
      <td>{{request.colour}}</td>
      <td>{{request.size}}</td>
      <td>{{request.comment}}</td>

  </tbody>
  {% endfor %}
  </table>

  {% else %}
    <p>There are no such fruit available.</p>
  {% endif %}

</body>      

{% endblock %}

Я ожидаю увидеть работу условного оператора в моем шаблоне.Это когда его mango_list отобразит список запросов, включая manago, а когда его banana_list, отобразится список запросов, включая banana.Но работает только список манго.Пожалуйста, помогите ....

1 Ответ

0 голосов
/ 03 июня 2019

Вы можете упростить это, передав параметры из url(..). Сначала мы можем определить функцию вида как:

def fruit_list_view(request, <b>taste</b>):
    context = {
        '{}_list'.format(<b>taste</b>): Request.objects.filter(taste__icontains=<b>taste</b>)
    }
    return render(request,"frCat_list.html",context=context)

и затем в urls.py мы можем передать значение для taste в url(..) [Django-doc] :

# app/urls.py

urlpatterns = [
    path('', views.index, name='index'),
    path('mango_list/', views.fruit_list_view<b>, kwargs={'taste': 'mango'}</b>, name='mango_list'),
    path('banana_list/', views.fruit_list_view<b>, kwargs={'taste': 'banana'}</b>, name='banana_list'),
]

В вашем шаблоне укажите , а не имя переменной request, так как Django передает в шаблон переменную с именем request. Поскольку они выглядят очень похожими, возможно, было бы лучше использовать одно название для продуктов и устранить неоднозначность другим способом.

Однако, кажется, имеет больше смысла просто всегда использовать одну и ту же переменную list и всегда выполнять рендеринг с этим списком, например:

def fruit_list_view(request, taste):
    context = {
        <b>'item_list'</b>: Request.objects.filter(taste__icontains=taste)
    }
    return render(request,"frCat_list.html",context=context)

В шаблоне мы можем сделать это с помощью:

<body>
{% if list %}
    {% for item in <b>item_list</b> %}
  <tbody> 

      <td><a href="{% url 'request-detail' item.id %}">{{item.id}}</a></td>
      <td>{{item.price}}</td>
      <td>{{item.size}}</td>
      <td>{{item.comment}}</td>

  </tbody>
  {% endfor %}
  </table>
{% endif %}
</body>
...