我有以下代码:
many_posts = BlogPost.query.filter(or_((BlogPost.problem_name.ilike("%" + form.search.data + "%")),(BlogPost.text.ilike("%" + form.search.data + "%")))).order_by(BlogPost.date.desc()).paginate(page=page, per_page=10)
return render_template('blog_search_result.html', id_list=id_list, many_posts=many_posts, no_posts=no_posts)
这是一个sqlalchemy 查询命令,它允许我网站上的用户搜索/过滤和查询博客。但有时,他们提供的输入不在数据库中,我的网站不会显示任何内容。因此,我不想显示任何内容,而是想显示一条文字:“找不到与您的搜索相关的内容”。 我想知道是否有任何“if语句”Python/Sqlalchemy代码可以用来识别我的查询命令是否没有找到任何信息,然后显示上面的引用。类似:
if many_posts is null:
no_posts= "Couldn't find relating problems with your search"
与 Many_posts 连接的部分 HTML 代码:
<h4>Search results<span class="iconify" data-icon="icons8:search" data-inline="false"></span>:</h4>
<p>{{ no_posts }}</p>
<div class="container row row-cols-1 row-cols-md-2 text-center">
{% for post in many_posts.items%}
<div class="card border-dark mb-3 " style="width: 20rem;">
<div class="card-body ">
<h7><a class="text-warning" href="{{ url_for('users.user_posts', username=post.creator.first_name+post.creator.middle_name+post.creator.last_name) }}"><img class="text-center rounded" src="{{ url_for('static', filename='profile_pics/'+ post.creator.profile_image) }}" width = "35" height = "35" alt=""> {{ post.creator.first_name}} {{ post.creator.middle_name }} {{ post.creator.last_name }}</a></h7>
<p></p>
<img class="text-center rounded responsive1" alt="" src="{{ url_for('static', filename='blog_pics/'+ post.blog_image) }}" width = "495" height = "250">
{# Need caution for post.blog_image on the code above #}
<p></p>
<h2><a class="card-tittle text-body problem" href="{{ url_for('blog_posts.blog_view', blog_validated_id=post.blog_id) }}">{{ post.problem_name[0:40]}}..</a></h2>
<p class="card-text">{{ post.text[0:100] }}</p>
<p><small class="text-muted">Posted on: {{ post.date.strftime('%Y-%m-%d') }}</small></p>
<a class="btn btn-warning" href="{{ url_for('blog_posts.blog_view', blog_validated_id=post.blog_id) }}">Read more</a>
</div>
我是编码初学者,如果您能帮助我,我将不胜感激。谢谢!
==========================答案/解决方案================= ========
我使用以下代码:
方法一:
many_posts0 = BlogPost.query.filter(or_((BlogPost.problem_name.ilike("%" + form.search.data + "%")),(BlogPost.text.ilike("%" + form.search.data + "%")))).order_by(BlogPost.date.desc())
many_posts = many_posts0.paginate(page=page, per_page=10)
num_posts = many_posts0.count()
if num_posts == 0:
no_posts="Couldn't find relating problems"
else:
no_posts=''
return render_template('blog_search_result.html', id_list=id_list, many_posts=many_posts, num_posts=num_posts, no_posts=no_posts)
在 HTML 中,我使用:
<p>{{no_posts}}</p>
方法2:
many_posts = BlogPost.query.filter(or_((BlogPost.problem_name.ilike("%" + form.search.data + "%")),(BlogPost.text.ilike("%" + form.search.data + "%")))).order_by(BlogPost.date.desc())
no_posts = ''
if not many_posts.first():
no_posts= "Couldn't find relating problems with your search"
many_posts = many_posts.paginate(page=page, per_page=10)
最佳答案
不确定,但您可以尝试两件事:
如果没有返回行,查询结果可能不会计算为False
。空列表的计算结果为 False,但查询结果可能是不同类型的对象,并且可能不会计算为 False。
转换为列表可能会有所帮助。
return render_template('blog_search_result.html', id_list=id_list, posts=list(posts))
用于调试目的。您可以添加以下内容。 打印/记录对于理解很有帮助
print("Posts is ", posts, "and as bool it returns ", bool(posts))
return render_template('blog_search_result.html', id_list=id_list, posts=list(posts))
首次反馈后
好的,SqlAlchemy paginate()
的输出不可迭代。 (你是否尝试阅读 paginate 的文档。它可能会提到是否有一些关于结果数量的信息)
以下可能适用于 SqlAlchemy(我没有时间尝试)
posts_to_show = BlogPost.query.filter(or_((BlogPost.problem_name.ilike("%" + form.search.data + "%")),(BlogPost.text.ilike("%" + form.search.data + "%")))).order_by(BlogPost.date.desc())
post_page = posts_to_show.paginate(page=page, per_page=10)
num_posts = posts.count() # there might be something better to find out if there is at least one post, but I don't know it
return render_template('blog_search_result.html', id_list=id_list, posts=posts_page, num_posts=num_posts)
关于python - 是否有 "if command"来识别我的 sqlalchemy sqlite 查询命令是否为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61904126/