使用 Django for 循环自动填充 HTML 属性
Automatically populating HTML attributes with Django for-loop
我正在使用 Django 和 Wagtail CMS 制作一个网站,并且有一种方法可以通过 html 模板中名为“data-group”的自定义属性过滤 posts。当我对所有内容进行硬编码时它会起作用,但我想使用一些逻辑为每个 post 动态填充该属性。基本上,我希望在此处填充 post 标签,但我在执行此操作时遇到了问题。
我会用
突出显示代码的相关行
--------------------------
硬编码过滤器按钮示例:
<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>
单击上述任何按钮时,它会过滤 posts/items 数据组属性中具有相似值的值。
它正在过滤的项目的示例如下图数据组列表所示:
--------------------------<figure class="item standard" data-groups='["category_all", "category_detailed"]'> --------------------------
<div class="item">
<div class="blog-card">
<div class="media-block">
<div class="category">
<a href="#" title="View all posts in WordPress">WordPress</a>
</div>
<a href="blog-post-1.html">
<img src="./img/blog/blog_post_1.jpg" alt="How to Make a WordPress Plugin Extensible" title="" />
<div class="mask"></div>
</a>
</div>
<div class="post-info">
<div class="post-date">04 Dec 2019</div>
<a href="blog-post-1.html">
<h4 class="blog-item-title">How to Make a WordPress Plugin Extensible</h4>
</a>
</div>
</div>
</div>
</figure>
更多符合上述按钮的例子:
<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 项目都会填充该模板,因此我尝试了一些填充过滤器的逻辑,但我似乎无法获取标签并将它们插入到图中的数据组属性中。
下面的内容用于填充按钮(虽然我还没有找到一种方法在这里只显示独特的项目):
{% for post in all_posts %}
{% for tag in post.tags.all %}
<li>
<a class="filter btn btn-sm btn-link" data-group="{{tag}}">{{tag}}</a>
</li>
{% endfor %}
{% endfor %}
这是我在属性中填充 post 标签的代码,它似乎不起作用:
{% for post in all_posts %}
<!-- Blog Post 1 -->
--------------------------<figure class="item standard" data-group='["all", {% for tag in post.tags.all %}tag{% endfor %} ]'>-------------------------------
<div class="item">
<div class="blog-card">
<div class="media-block">
<div class="category">
<a href="#" title="View all posts in WordPress">WordPress</a>
</div>
<a href="blog-post-1.html">
{% image post.blog_image fill-350x200 as img %}
<img src="{{img.url}}" alt="{{img.alt}}" title="">
</a>
</div>
<div class="post-info">
<div class="post-date">{{post.published_date}}</div>
<br>
{% for tag in post.tags.all %}
<div class="post-date">{{tag}},</div> <!-- This populates fine! -->
{% endfor %}
<a href="blog-post-1.html">
<h4 class="blog-item-title">{{post.custom_title}}</h4>
</a>
</div>
</div>
</div>
</figure>
{% endfor %}
有没有人知道用模型中的项目自动填充该属性的方法,以避免必须在 HTML 中进行硬编码?
此代码可以很好地填充文本,例如下面显示良好的代码:
{% for tag in post.tags.all %}
<div class="post-date">{{tag}},</div>
{% endfor %}
谢谢。
编辑:添加行为照片。
当我单击“全部”时,所有 post 都显示如下(我在右上角突出显示了通过标签填充的过滤器,并且在每个 post 下是以编程方式添加的标签post):
当我点击任何其他过滤器时,它们都消失了:
单击任何其他过滤器,它们都会消失,尽管在它们下面打印标签。
编辑 2:添加实际页面的检查。
这是检查时填充数字的 html,据我所知,填充和格式化的项目正确:
这些是过滤器按钮,其数据组在检查时自动生成:
这是过滤页面的javascript:
看起来您只是缺少 tag
周围的 {{ }}
方括号,所以它只是输出文字文本 tag
而不是您的 tag
变量。您还需要确保逗号和引号位于正确的位置...
data-group='["all"{% for tag in post.tags.all %}, "{{ tag }}"{% endfor %} ]'
或者如果您需要 category_
前缀,如您的工作示例所示:
data-group='["category_all"{% for tag in post.tags.all %}, "category_{{ tag }}"{% endfor %} ]'
有趣的是,结合 gasman 的格式建议以及为 post 设置复数数据组解决了这个问题。
发件人:
<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 %}]'>
对于遇到类似问题的任何人,请注意逗号的位置非常重要。通过硬编码进行故障排除时,如果我在列表的开头或结尾有一个不合适的逗号,代码将无法运行。
我正在使用 Django 和 Wagtail CMS 制作一个网站,并且有一种方法可以通过 html 模板中名为“data-group”的自定义属性过滤 posts。当我对所有内容进行硬编码时它会起作用,但我想使用一些逻辑为每个 post 动态填充该属性。基本上,我希望在此处填充 post 标签,但我在执行此操作时遇到了问题。
我会用
突出显示代码的相关行--------------------------
硬编码过滤器按钮示例:
<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>
单击上述任何按钮时,它会过滤 posts/items 数据组属性中具有相似值的值。
它正在过滤的项目的示例如下图数据组列表所示:
--------------------------<figure class="item standard" data-groups='["category_all", "category_detailed"]'> --------------------------
<div class="item">
<div class="blog-card">
<div class="media-block">
<div class="category">
<a href="#" title="View all posts in WordPress">WordPress</a>
</div>
<a href="blog-post-1.html">
<img src="./img/blog/blog_post_1.jpg" alt="How to Make a WordPress Plugin Extensible" title="" />
<div class="mask"></div>
</a>
</div>
<div class="post-info">
<div class="post-date">04 Dec 2019</div>
<a href="blog-post-1.html">
<h4 class="blog-item-title">How to Make a WordPress Plugin Extensible</h4>
</a>
</div>
</div>
</div>
</figure>
更多符合上述按钮的例子:
<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 项目都会填充该模板,因此我尝试了一些填充过滤器的逻辑,但我似乎无法获取标签并将它们插入到图中的数据组属性中。
下面的内容用于填充按钮(虽然我还没有找到一种方法在这里只显示独特的项目):
{% for post in all_posts %}
{% for tag in post.tags.all %}
<li>
<a class="filter btn btn-sm btn-link" data-group="{{tag}}">{{tag}}</a>
</li>
{% endfor %}
{% endfor %}
这是我在属性中填充 post 标签的代码,它似乎不起作用:
{% for post in all_posts %}
<!-- Blog Post 1 -->
--------------------------<figure class="item standard" data-group='["all", {% for tag in post.tags.all %}tag{% endfor %} ]'>-------------------------------
<div class="item">
<div class="blog-card">
<div class="media-block">
<div class="category">
<a href="#" title="View all posts in WordPress">WordPress</a>
</div>
<a href="blog-post-1.html">
{% image post.blog_image fill-350x200 as img %}
<img src="{{img.url}}" alt="{{img.alt}}" title="">
</a>
</div>
<div class="post-info">
<div class="post-date">{{post.published_date}}</div>
<br>
{% for tag in post.tags.all %}
<div class="post-date">{{tag}},</div> <!-- This populates fine! -->
{% endfor %}
<a href="blog-post-1.html">
<h4 class="blog-item-title">{{post.custom_title}}</h4>
</a>
</div>
</div>
</div>
</figure>
{% endfor %}
有没有人知道用模型中的项目自动填充该属性的方法,以避免必须在 HTML 中进行硬编码?
此代码可以很好地填充文本,例如下面显示良好的代码:
{% for tag in post.tags.all %}
<div class="post-date">{{tag}},</div>
{% endfor %}
谢谢。
编辑:添加行为照片。
当我单击“全部”时,所有 post 都显示如下(我在右上角突出显示了通过标签填充的过滤器,并且在每个 post 下是以编程方式添加的标签post):
当我点击任何其他过滤器时,它们都消失了:
编辑 2:添加实际页面的检查。
这是检查时填充数字的 html,据我所知,填充和格式化的项目正确:
这些是过滤器按钮,其数据组在检查时自动生成:
这是过滤页面的javascript:
看起来您只是缺少 tag
周围的 {{ }}
方括号,所以它只是输出文字文本 tag
而不是您的 tag
变量。您还需要确保逗号和引号位于正确的位置...
data-group='["all"{% for tag in post.tags.all %}, "{{ tag }}"{% endfor %} ]'
或者如果您需要 category_
前缀,如您的工作示例所示:
data-group='["category_all"{% for tag in post.tags.all %}, "category_{{ tag }}"{% endfor %} ]'
有趣的是,结合 gasman 的格式建议以及为 post 设置复数数据组解决了这个问题。
发件人:
<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 %}]'>
对于遇到类似问题的任何人,请注意逗号的位置非常重要。通过硬编码进行故障排除时,如果我在列表的开头或结尾有一个不合适的逗号,代码将无法运行。