cap*_*ish 6 django django-templates django-cms
Django == 1.5.1 django-cms == 2.4.1
我想在django-cms中从所选页面的所有子页面中创建类似摘要视图的内容,为每个列出的子项提取更多...链接的标题,截断内容等.我已经成功获得了标题和路径,但我很难从占位符获取内容.
我有这样的模板标签:
from cms.models import Page
from cms.utils.page_resolver import get_page_from_path
from django import template
register = template.Library()
@register.inclusion_tag('news_summary_item.html')
def get_news_items():
news_root = get_page_from_path('news')
newsitems = news_root.children.filter(published=True)
return {'newsitems':newsitems}
Run Code Online (Sandbox Code Playgroud)
这是它使用的模板:
{% load cms_tags menu_tags %}
<ul>
{% for item in newsitems %}
<li><a href="/{{ item.get_path }}">{{ item.get_title }}</a>
{% for placeholder in item.placeholders.all %}
# {% show_placeholder placeholder.slot item current_language %} #
{% endfor %}
</li>
{% endfor %}
</ul>
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助获取占位符内容吗?理想情况下,id喜欢能够通过truncatewords_html传递它来获得摘要,但是可以通过其他方式获得相同的效果.
感谢您的任何提示/指示!
我必须在一个项目中索引 CMS 内容,并获取每个占位符的内容,并且占位符的内容存储在附加的插件中
如何在视图中获取 CMSPlugin 的内容?
from cms.models import CMSPlugin
plugin = CMSPlugin.objects.filter(plugin_type='TextPlugin')[0] # Get first text plugin
# This return the body/content of the plugin:
plugin_content = plugin.get_plugin_instance()[0].body
Run Code Online (Sandbox Code Playgroud)
如果您想管理其他插件,例如PicturePlugin您可以获得“alt”文本,例如:
plugin_picture_content = plugin.get_plugin_instance()[0].alt
Run Code Online (Sandbox Code Playgroud)
如何获取模板中CMSPlugin的内容?
# plugin_object containing a CMSPlugin
{{plugin_object.get_plugin_instance.0.body}}
Run Code Online (Sandbox Code Playgroud)
我想当你想要获取我们正在讨论的内容时TextPlugin,你必须要小心,因为只有插件类型TextPlugin具有属性body,PicturePlugin具有属性alt和LinkPlugin具有属性href等等......
适合您问题的解决方案
您正在对placeholders进行循环,因此您需要获取每个占位符的所有插件并获取每个插件的内容,因为我之前提到的占位符的内容存储在附加的插件中(TextPlugin、PicturePlugin、链接插件...)。
... ... ...
{% for placeholder in item.placeholders.all %} # Loop over placeholders
{% for plugin in placeholder.get_plugin_list %} # Get plugins for each placeholder
{{plugin.get_plugin_instance.0.body|striptags}}
{% endfor %}
{% endfor %}
... ... ...
Run Code Online (Sandbox Code Playgroud)
为了确保您只显示其他插件的内容TextPlugin而不是来自其他插件的内容,您可以执行以下操作:
... ... ...
{% for placeholder in item.placeholders.all %} # Loop over placeholders
{% for plugin in placeholder.get_plugin_list %} # Get plugins for each placeholder
{% if 'TextPlugin' in plugin.plugin_type %}
{{plugin.get_plugin_instance.0.body|striptags}}
{% endif %}
{% endfor %}
{% endfor %}
... ... ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1275 次 |
| 最近记录: |