Python 属性不可用时在jinja2中排序
我有一套文章(用于生成静态站点),其中包括一个名为hotels的类别。我想把这些旅馆分类。问题是,只有酒店有一个名为“城市”的属性,而其他文章没有,这显然会导致以下错误:Python 属性不可用时在jinja2中排序,python,jinja2,Python,Jinja2,我有一套文章(用于生成静态站点),其中包括一个名为hotels的类别。我想把这些旅馆分类。问题是,只有酒店有一个名为“城市”的属性,而其他文章没有,这显然会导致以下错误: Caught exception "'pelican.contents.Article object' has no attribute 'city'". 以下是我正在使用的代码: {% for article in articles|sort(attribute='city') %} {% if article.categ
Caught exception "'pelican.contents.Article object' has no attribute 'city'".
以下是我正在使用的代码:
{% for article in articles|sort(attribute='city') %}
{% if article.category == 'hotels' %}
<a href="hotels/{{ article.slug }}.html">
<p>{{ article.title }}</p>
</a>
{% endif %}
{% endfor %}
{%for article in article | sort(attribute='city')%}
{%if article.category=='hotels%}
{%endif%}
{%endfor%}
是否有办法检查属性是否存在并提供一些默认值,以便它不会导致错误?您可以将
if
语句作为筛选器移动到for
循环中:
for article in articles if article.category == 'hotels' | sort(attribute='city')
您可以将
if
语句作为筛选器移动到for
循环中:
for article in articles if article.category == 'hotels' | sort(attribute='city')
如果只想迭代酒店,请参阅。如果您想迭代所有的文章,但对酒店进行排序,而其余的按任意顺序排列,您可以使用:
这将包括您在
my_macro
中定义的所有内容,首先按所需顺序为每个酒店定义,然后为非酒店的每篇文章定义。如果您只想迭代酒店,请参阅。如果您想迭代所有的文章,但对酒店进行排序,而其余的按任意顺序排列,您可以使用:
这将包括您在
my_macro
中定义的所有内容,首先按所需顺序为每个酒店定义,然后为每个非酒店的文章定义。我在寻找类似解决方案时找到了此页面。
最终,我的解决方式有所不同,这可能对其他人有所帮助
在我的一个Pelican模板中,我添加了由“post_stats”插件收集的关于大概阅读时间的统计数据。看起来像
~{{ article.stats['read_mins']|default("0") }} min read
但是如果插件未加载,则“article”对象没有“stats”属性,渲染失败
Jinja具有内置测试,用于测试是否定义了变量。
所以,我提出了这个解决方案
~{{ article.stats['read_mins'] if article.stats is defined else "0" }} min read
我在寻找类似解决方案时发现了此页面。 最终,我的解决方式有所不同,这可能对其他人有所帮助 在我的一个Pelican模板中,我添加了由“post_stats”插件收集的关于大概阅读时间的统计数据。看起来像
~{{ article.stats['read_mins']|default("0") }} min read
但是如果插件未加载,则“article”对象没有“stats”属性,渲染失败
Jinja具有内置测试,用于测试是否定义了变量。
所以,我提出了这个解决方案
~{{ article.stats['read_mins'] if article.stats is defined else "0" }} min read
如果要仅显示具有
'city'
属性的条目,并按'city'
对该列表进行排序,请执行以下操作:
for article in articles|selectattr("city")|sort(attribute="city")
如果要仅显示具有
'city'
属性的条目,并按'city'
对该列表进行排序,请执行以下操作:
for article in articles|selectattr("city")|sort(attribute="city")
谢谢你的提示,肖恩。。当我使用你的建议时,我得到了这个结论:CRITICAL:'str object'没有属性'city'。似乎排序适用于文章中的所有对象。谢谢您的提示Sean。。当我使用你的建议时,我得到了这个结论:CRITICAL:'str object'没有属性'city'。似乎排序适用于文章中的所有对象。感谢您的回复。当我这样做时,我得到“CRITICAL:'str object'没有属性'city'。”。。和我列出的肖恩·维埃拉的答案一样。谢谢你的回复。当我这样做时,我得到“CRITICAL:'str object'没有属性'city'。”。。和我列出的肖恩·维埃拉的答案一样。