Django - ошибка, повторяющая данные в шаблоне - PullRequest
0 голосов
/ 06 сентября 2018

Что я хотел бы сделать, так это перебрать список цветов и поместить карту в соответствующий столбец в шаблоне, если карта содержит указанный цвет. Мне трудно рефакторинг кода, чтобы сделать это в СУХОЙ манере.

Я бы хотел иметь возможность обновить код один раз и применить его ко всем цветам, а не иметь отдельную логику для каждого цвета (как это происходит в настоящее время).

Вот вид, с которым я сейчас работаю:

class SetList(ListView):
  template_name = 'set_list.html'
  context_object_name = 'cards'

  def get_queryset(self):
      set_name_from_url = self.kwargs['set_name']
      set_name_title = set_name_from_url.title()
      return sorted(CardModel.objects.all().filter(
          set_name=set_name_title),
          key=lambda x: x.name)

  def get_context_data(self, **kwargs):
      context = super().get_context_data(**kwargs)

      set_name_from_url = self.kwargs['set_name']
      set_name_title = set_name_from_url.title()

      colors = ['white', 'blue', 'black', 'red', 'green', 'gold-artifacts-and-lands']
      context['colors'] = colors
      for color in colors:
          context[color] = sorted(CardModel.objects.all().filter(
              set_name=set_name_title,
              color_identity=color),
              key=lambda x: x.name)
      return context

и содержание шаблона:

{% block content %}
<div class="row">
    <div class="col-2">
        {% for card in white %}
            <p> {{ card }}</p>
        {% endfor %}
    </div>
    <div class="col-2">
        {% for card in blue %}
            <p>{{ card }}</p>
            <img src="{{ card.image_url }}">
        {% endfor %}
    </div>
</div>
{% endblock %}

Я хочу, чтобы шаблон (или просмотр, если он более эффективен) выглядел примерно так:

{% block content %}
<div class="row">
  {% for color in colors %}
    <div class="col-2">
        {% for card in color %}
          <p> {{ card }}</p>
        {% endfor %}
     </div>
   {% endfor %}
 </div>
{% endblock %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...