Как передать аргумент из 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 %}