Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 属性不可用时在jinja2中排序_Python_Jinja2 - Fatal编程技术网

Python 属性不可用时在jinja2中排序

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

我有一套文章(用于生成静态站点),其中包括一个名为hotels的类别。我想把这些旅馆分类。问题是,只有酒店有一个名为“城市”的属性,而其他文章没有,这显然会导致以下错误:

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'。”。。和我列出的肖恩·维埃拉的答案一样。