使用Django for循环自动填充HTML属性
我正在使用Django和Wagtail CMS创建一个网站,并且有一种通过html模板中名为“数据组”的自定义属性过滤帖子的方法。当我硬编码所有内容时,它是有效的,但我想使用一些逻辑来为每个帖子动态填充该属性。基本上,我希望在那里填充post标记,但我在这样做时遇到了问题 我将使用使用Django for循环自动填充HTML属性,html,django,wagtail,Html,Django,Wagtail,我正在使用Django和Wagtail CMS创建一个网站,并且有一种通过html模板中名为“数据组”的自定义属性过滤帖子的方法。当我硬编码所有内容时,它是有效的,但我想使用一些逻辑来为每个帖子动态填充该属性。基本上,我希望在那里填充post标记,但我在这样做时遇到了问题 我将使用 -------------------------- 硬编码过滤器按钮示例: <ul class="portfolio-filters">
--------------------------
硬编码过滤器按钮示例:
<ul class="portfolio-filters">
<li class="active">
<a class="filter btn btn-sm btn-link" data-group="category_all">All</a>
</li>
<li>
<a class="filter btn btn-sm btn-link" data group="category_detailed">Detailed</a>
</li>
<li>
<a class="filter btn btn-sm btn-link" data-group="category_direct-url">Direct URL</a>
</li>
<li>
<a class="filter btn btn-sm btn-link" data-group="category_image">Image</a>
</li>
<li>
<a class="filter btn btn-sm btn-link" data-group="category_soundcloud">SoundCloud</a>
</li>
<li>
<a class="filter btn btn-sm btn-link" data-group="category_video">Video</a>
</li>
<li>
<a class="filter btn btn-sm btn-link" data-group="category_vimeo-video">Vimeo Video</a>
</li>
<li>
<a class="filter btn btn-sm btn-link" data-group="category_youtube-video">YouTube Video</a>
</li>
</ul>
-
2019年12月4日
更多与上述按钮匹配的示例:
<figure class="item lbvideo" data-groups='["category_all", "category_video", "category_youtube-video"]'>
<figure class="item lbimage" data-groups='["category_all", "category_image"]'>
<figure class="item lbaudio" data-groups='["category_all", "category_soundcloud"]'>
<figure class="item lbvideo" data-groups='["category_all", "category_video", "category_vimeo-video"]'>
等等
当所有内容都按上述方式进行硬编码时,上述方法有效
然而,我想通过一个for循环创建一个模板,该循环将填充每个添加的post/portfolio项,因此我尝试了一些填充过滤器的逻辑,但我似乎无法获取标记并将它们插入图中的data groups属性
下面是填充按钮的方法(尽管我还没有找到一种在这里只显示唯一项目的方法):
{%for post in all_posts%}
{post.tags.all%中标记的%s}
{{发布日期}
{post.tags.all%中标记的%s}
{{tag}},
{%endfor%}
{%endfor%}
有人知道一种方法可以自动用模型中的项目填充该属性,从而避免用HTML硬编码吗
此代码可以很好地填充文本,例如下面显示的fine:
{% for tag in post.tags.all %}
<div class="post-date">{{tag}},</div>
{% endfor %}
{%for post.tags.all%中的标记]
{{tag}},
{%endfor%}
谢谢
编辑:添加行为照片
当我单击“全部”时,所有帖子如下所示(我突出显示了通过右上角的标记填充的过滤器,每个帖子下都是以编程方式为该帖子添加的标记):
单击任何其他过滤器时,它们都会消失:
单击任何其他过滤器,它们都会消失,尽管它们下面打印了标签
编辑2:添加实际页面的检查。
这是检查时填充图形的html,据我所知,填充和格式化的项目正确:
这些是过滤器按钮,其数据组在检查时自动生成:
这是过滤页面的javascript:
看起来您只是缺少
{{}
标记周围的括号,所以它只是输出文本标记
,而不是标记
变量。您还需要确保逗号和引号位于正确的位置
data-group='["all"{% for tag in post.tags.all %}, "{{ tag }}"{% endfor %} ]'
或者,如果您需要工作示例中的类别
前缀:
data-group='["category_all"{% for tag in post.tags.all %}, "category_{{ tag }}"{% endfor %} ]'
有趣的是,将gasman的格式建议与post的数据组复数结合起来解决了这个问题 发件人:
致:
对于任何有类似问题的人,请注意逗号的位置非常重要。当通过硬编码解决问题时,如果我在列表的开头或结尾有一个不合适的逗号,代码将不起作用。与其说你的模板代码“似乎不起作用”,不如告诉我们它生成的HTML,以及这与预期输出的差异。添加了一些照片来说明我遇到的问题。与其尝试从图像中诊断问题,不如尝试在浏览器的开发人员工具中查看生成的HTML源代码,看看它与正在工作的硬编码版本的HTML有何不同。这几乎肯定会告诉你你自己解决问题所需要的一切——如果没有,请同时向我们展示这两个版本,我们可以告诉你需要在Django模板代码中修复什么才能产生所需的结果。嗨,gasman,谢谢你的提示,尽管我在其他地方都这么做了,但我已经完全忘记了这一点,即使添加了它,问题仍然存在。基本上,当我点击任何一个过滤器时,如果我点击“全部”,它们都会出现(因为所有过滤器都是硬编码的),但其他过滤器似乎都不起作用——所有项目都会消失,尽管它们的过滤器在数据组中。
{% for tag in post.tags.all %}
<div class="post-date">{{tag}},</div>
{% endfor %}
data-group='["all"{% for tag in post.tags.all %}, "{{ tag }}"{% endfor %} ]'
data-group='["category_all"{% for tag in post.tags.all %}, "category_{{ tag }}"{% endfor %} ]'
<figure class="item standard" data-group='["all"{% for tag in post.tags.all %},"{{tag}}"{% endfor %}]'>
<figure class="item standard" data-groups='["all"{% for tag in post.tags.all %},"{{tag}}"{% endfor %}]'>