Django: Если значение существует в базе данных, передать его как переменную из представления в шаблон - PullRequest
1 голос
/ 08 июля 2020

Я новичок в кодировании и новичок в Django. Я искал stackoverflow для своего вопроса, но не нашел того, что искал:

Я пытаюсь проверить, есть ли определенные значения в моей базе данных, и, если да, передать их как переменную в шаблон . Значения будут элементами раскрывающегося меню. Если у меня есть, например, база данных с bike1 по bikeN, я бы хотел проверить, соответствует ли значение атрибута «handlebar» каждого объекта базы данных определенному производителю. Если да, передайте его в шаблон, чтобы он мог появиться в раскрывающемся меню для последующей фильтрации результатов.

Сначала я подумал, что должен проверить сам шаблон, и подумал примерно так:

bicyle_list. html

  <ul id='dropdown1' class='dropdown-content'>
      {% for bicyle in bicycles %}
          {% with manufacturerA=False %}
            {% if manufacturerA == False and bicycle.handlebar == "manufacturerA" %}
                <li><a href="#!">ManufacturerA</a></li>
                {% manufacturerA=True %}
            {% endif %}
          {% endwith %}
      {% endfor %}

Но, как я понимаю, шаблон должен содержать только лог рендеринга c. (Кроме того, мне пришлось бы использовать логические переменные в for-l oop, потому что производитель должен появляться в раскрывающемся меню только один раз, даже если есть несколько велосипедов с этим конкретным рулем. Изменение значения переменных в шаблоне мне кажется довольно сложным.)

В views.py я думал об этом, но не знаю, как работать с условиями и методом рендеринга:

views.py

        bicycles = Bicycle.objects.all()
        for bicycle in bicyles:
           if bicycle.handlebar == "manufacturerA":
               manufacturerA= "manufacturerA"
           if bicycle.handlebar == "manufacturerB":
               manufacturerB= "manufacturerB"

#if variable manufacturerA exists, pass it to the template – if not, not! Same with manufacturerB
#But how to include in return render(..)?

        return render(request, 'shop/bicycle_list.html', {'bicycles': bicycles}) 

У вас есть идеи, как передать необязательные переменные?

1 Ответ

0 голосов
/ 08 июля 2020

Вы можете получить список отдельных производителей с помощью:

def some_view(request):
    manufacturers = Bicycle.objects.values_list('handlebar', flat=True).distinct()
    return render(request, 'shop/bicycle_list.html', {'manufacturers': manufacturers})
<ul id='dropdown1' class='dropdown-content'>
  {% for <b>manufacturer in manufacturers</b> %}
    <li><a href="#!">{{ manufacturer }}</a></li>
  {% endfor %}
</ul>

Однако вы можете сделать модель для производителя и работать с many-to -one отношение [Django -doc] .

...