如何将参数从SnippetChooserPanel传递给django-template

时间:2016-11-24 15:34:39

标签: python django wagtail wagtail-snippet

my-django-project中,我成功实施了一个由wagtail驱动的应用,允许引用Map()的模型my-django-project作为wagtail/admin中的一个片段(如描述here)。

我现在的问题是,当我选择(在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处理的文档不多..

你有任何提示吗?

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

1 个答案:

答案 0 :(得分:2)

您选择的Map实例作为字段映射存储在页面对象上,因此您可以在模板代码中引用page.maps,就像您引用(例如)page.title一样。 (因为它只链接到一个地图,所以将字段重命名为地图可能是有意义的。) 这里没有真正的理由使用模板标记 - 您只需将相关的HTML直接插入home_page.html模板即可: &lt; div class =“col-xs-4 item-thumb”&gt;     &lt; a href =“{{page.maps.detail_url}}”&gt;&lt; img src =“{{page.maps.thumbnail_url}}”/&gt;     &LT; / A&GT; &LT; / DIV&GT; 或者将该HTML代码段移动到其自己的模板中,使用{%include%}标记包含: 模板/地图/ map.html: &lt; div class =“col-xs-4 item-thumb”&gt;     &lt; a href =“{{map.detail_url}}”&gt;&lt; img src =“{{map.thumbnail_url}}”/&gt;     &LT; / A&GT; &LT; / DIV&GT; home_page.html: {%include“maps / map.html”with map = page.maps%}