如何在Wagtail模板段落中嵌入显示页面创建日期时间戳
问题说明
Wagtail管理面板创建页面时,系统默认会显示页面自创建以来过去的时长:
需要在前端HTML段落中展示页面创建时间戳,预期效果如下:
当前使用的模板代码:
<div class="contenedor tarjetas mt-4 mb-4"> {% for post in posts %} <div class="fila_tarjetas clearfix"> <div class="col_tarjeta_img"> {% image post.blog_image fill-450x450 as blog_img %} <a href="{{ post.url }}"> <img class="tarjeta_imagen" src="{{ blog_img.url }}" alt="{{ blog_img.alt }}"> </a> </div> <div class="col_tarjeta_texto"> <a class="tarjeta_titulo" href="{{ post.url }}"> <h3>{{ post.custom_title }}</h3> <div class="tarjeta_contenido"> {{ post.content }} </div> <a href="{{ post.url }}" class="leer_mas">Leer más > ></a> </a> </div> </div> {% endfor %} </div>
实现方案
Wagtail所有Page模型默认内置两个和创建/发布时间相关的字段,直接在模板调用即可:
first_published_at:存储页面首次正式发布的时间,仅发布过的页面有值created_at:存储页面首次在系统中创建的时间,无论是否存为草稿都有值
配合Django模板内置过滤器可以自定义显示效果:- 显示格式化的绝对时间:用
date过滤器指定格式,比如{{ post.first_published_at|date:"Y-m-d H:i" }}会输出「2024-05-20 14:30」格式的时间 - 显示和后台一致的相对时长:用内置的
timesince标签,比如{% timesince post.first_published_at %}前发布,会输出「3天前发布」「2周前发布」这类效果
只需要把时间代码插入到模板中想要展示的位置即可,比如放在标题下方,修改后的参考代码:
<div class="contenedor tarjetas mt-4 mb-4"> {% for post in posts %} <div class="fila_tarjetas clearfix"> <div class="col_tarjeta_img"> {% image post.blog_image fill-450x450 as blog_img %} <a href="{{ post.url }}"> <img class="tarjeta_imagen" src="{{ blog_img.url }}" alt="{{ blog_img.alt }}"> </a> </div> <div class="col_tarjeta_texto"> <a class="tarjeta_titulo" href="{{ post.url }}"> <h3>{{ post.custom_title }}</h3> <!-- 新增创建时间展示行 --> <span class="text-muted small">{{ post.first_published_at|date:"Y年m月d日" }}</span> <div class="tarjeta_contenido"> {{ post.content }} </div> <a href="{{ post.url }}" class="leer_mas">Leer más > ></a> </a> </div> </div> {% endfor %} </div>
如果需要展示草稿的创建时间,把上面代码里的
first_published_at替换成created_at即可。
内容的提问来源于stack exchange,提问作者Squall32
相关产品推荐
相关产品推荐

