0

在 中my-django-project,我已经成功实现了一个 wagtail 驱动的应用程序,它允许将模型作为片段引用Map()my-django-project如此wagtail/admin所述)。

我现在的问题是,当我(在 SnippetChooserPanel 中)选择Map()要集成到我的 wagtail 模板中的实例时,我的选择会丢失,并且我的模板会呈现在 Map() 表中找到的所有实例。这是因为我在 SnippetChooserPanel 中的选择没有传递给 wagtail-app 模板。

我的 wagtail-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'],
    }

我的 wagtail-app.templates/ home_page.html

{% load maps_tags %}

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

我是 Wagtail 的新手,关于 SnippetChooserPanel 处理的文档不多。

你有什么提示吗?

提前感谢您提供的任何帮助。

4

1 回答 1

2

您选择的 Map 实例作为 field 存储在页面对象上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 %}
于 2016-11-24T16:12:13.823 回答