如何将参数从 SnippetChooserPanel 传递到 django 模板
How to pass an argument from SnippetChooserPanel to a django-template
在 my-django-project
中,我已经成功实现了一个 wagtail 驱动的应用程序,它允许引用 my-django-project
的模型 Map()
作为 wagtail/admin
中的一个片段(如描述 ).
我现在的问题是,当我选择(在 SnippetChooserPanel 中)将 Map()
的实例集成到我的 wagtail 模板中时,我的选择丢失了,我的模板呈现了在 Map() 中找到的所有实例table。
这是因为我在 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'],
}
我的鹡鸰-app.templates/home_page.html
{% load maps_tags %}
<div class="mine">
[...]
{% maps %}
</div>
我是 Wagtail 的新手,关于 SnippetChooserPanel 处理的文档不多..
你有什么提示吗?
提前感谢您提供的任何帮助。
您选择的地图实例作为字段 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 %}
标签:
templates/maps/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 %}
在 my-django-project
中,我已经成功实现了一个 wagtail 驱动的应用程序,它允许引用 my-django-project
的模型 Map()
作为 wagtail/admin
中的一个片段(如描述
我现在的问题是,当我选择(在 SnippetChooserPanel 中)将 Map()
的实例集成到我的 wagtail 模板中时,我的选择丢失了,我的模板呈现了在 Map() 中找到的所有实例table。
这是因为我在 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'],
}
我的鹡鸰-app.templates/home_page.html
{% load maps_tags %}
<div class="mine">
[...]
{% maps %}
</div>
我是 Wagtail 的新手,关于 SnippetChooserPanel 处理的文档不多..
你有什么提示吗?
提前感谢您提供的任何帮助。
您选择的地图实例作为字段 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 %}
标签:
templates/maps/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 %}