Как передать аргумент из SnippetChooserPanel в django-шаблон

В my-django-projectЯ успешно реализовал приложение на основе трясогузки, которое позволяет ссылаться на модель Map() из my-django-projectкак фрагмент в wagtail/admin(как описано здесь).

Моя проблема сейчас в том, что когда я выбираю (в SnippetChooserPanel) экземпляр Map() чтобы быть интегрированным в мой шаблон трясогузки, мой выбор теряется, и мой шаблон отображает все экземпляры, найденные в таблице Map(). Это потому, что мой выбор в SnippetChooserPanel не передается шаблону wagtail-app.

моя трясогузка-app /models.py

class HomePage(Page):
    [..]    
    maps = models.ForeignKey(
        'maps.Map',
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        related_name='+'
    )

    [..]
    class Meta:
        verbose_name = "Homepage"

HomePage.content_panels = Page.content_panels + [
        [..]
        SnippetChooserPanel('maps')
        ]

my-django-project.maps.templates.maps /maps.html

{% load wagtailimages_tags wagtailadmin_tags %}
{% load i18n %}

{% for map in maps %}
    <div class="col-xs-4 item-thumb">
        <a href="{{ map.detail_url }}"><img src="{{ map.thumbnail_url }}" />
        </a>
    </div>
{% endfor %}

my-django-project.maps.templatetags /maps_tags.html

from django import template
from geonode.maps.models import Map

register = template.Library()

# Map snippets
@register.inclusion_tag('maps/maps.html', takes_context=True)
def maps(context):
    print("QUI \n")
    return {
        'maps': Map.objects.all(),
        'request': context['request'],
    }

моя трясогузка-app.templates /home_page.html

{% load maps_tags %}

<div class="mine">
[...]
{% maps %}
</div>

Я новичок в Wagtail и не так много документации по обработке SnippetChooserPanel..

У вас есть какие-нибудь намеки?

Заранее благодарю за любую помощь, которую вы могли бы оказать.

1 ответ

Решение

Выбранный вами экземпляр карты хранится на объекте страницы как поле mapsтак что вы можете обратиться к page.maps в коде вашего шаблона, как вы бы сослались (например) page.title, (Поскольку он ссылается только на одну карту, возможно, имеет смысл переименовать поле в map.)

Нет реальной причины использовать здесь тег шаблона - вы можете просто вставить соответствующий HTML-код прямо в шаблон home_page.html:

<div class="col-xs-4 item-thumb">
    <a href="{{ page.maps.detail_url }}"><img src="{{ page.maps.thumbnail_url }}" />
    </a>
</div>

или переместите этот HTML-фрагмент в собственный шаблон, включенный с помощью {% include %} тег:

шаблоны / карты / map.html:

<div class="col-xs-4 item-thumb">
    <a href="{{ map.detail_url }}"><img src="{{ map.thumbnail_url }}" />
    </a>
</div>

home_page.html:

{% include "maps/map.html" with map=page.maps %}
Другие вопросы по тегам