Python для l oop in Django возвращение случайного значения в словаре - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть страница Wagtail, отображающая блок ссылок маршрутизации, и я добавляю значок в модель маршрутизации для отображения с заголовком в блоке на главной странице. На главной странице я получаю контекст для поля загруженного файла для значка, как показано ниже:

def get_context(self, request):
   context = super().get_context(request)
   routing_links_queryset = self.routing_links
   for link in routing_links_queryset:            
      i_link = link.link_icon
      if i_link:
           try:
              with i_link.icon.open() as file_obj:
                  data = file_obj.read()
                  data = data.decode("utf-8")                          
                  context["iconlink_data"] = data
           except OSError:
                pass
   return context

link_icon - это поле в модели routing_links, а значок - это поле файла в модели Icon. Теперь это возвращает контекст на главной странице, но если на главной странице есть 2 блока ссылок маршрутизации, для обоих будет отображаться один и тот же значок.

Нужно ли добавлять контекст в каждую итерацию? Как именно я могу добавить в этом случае или любой другой способ сделать это?

1 Ответ

1 голос
/ 07 февраля 2020

Измените get_context, чтобы добавить все значки к контексту ["links"] dict, затем l oop через него в шаблоне:

def get_context(self, request):
    context = super().get_context(request)
    routing_links_queryset = self.routing_links
    context["links"] = []
    for link in routing_links_queryset: 
        link_dict = {"link_obj": link}
        i_link = link.link_icon
        if i_link:
            try:
                with i_link.icon.open() as file_obj:
                    data = file_obj.read()
                    data = data.decode("utf-8")                          
                    link_dict["iconlink_data"] = data
        context["links"].append(link_dict)
            except OSError:
                pass
    return context

в шаблоне Django это будет выглядеть как-то как:

{% for link_dict in links %}
   {{ link_dict.link_obj }}
   {{ link_dict.link_obj.link_field }}
   <svg height="35" width="35" style="display: inline">{{ link_dict.iconlink_data|safe }}</svg>
{% endfor %}

(добавлено в качестве ответа для форматирования)

...