flask模板如何调用出数据

文章表
news表
id url title content classid
1 http://www.xxx.com/1/a.html 标题1 内容1 1
2 http://www.xxx.com/2/b.html 标题2 内容2 2
3 http://www.xxx.com/3/c.html 标题3 内容3 3
4 http://www.xxx.com/1/e.html 标题4 内容4 1
5 http://www.xxx.com/2/w.html 标题5 内容5 2
......还有很多数据......

栏目表
class表
id name
1 栏目1
2 栏目2
3 栏目3
......还有很多数据......

views.py

news = News.query.join(
    Class
).order_by(
    News.id.desc()
)..paginate(1,5))
或者
news = News.query.join(
    Class
).order_by(
    News.id.desc()
).limit(5) 用这个 for循环就不需要.items

模板调用数据

{% for v in news.items %}
{% if loop.index is odd %}
<div class="pnvt_news_model ">
<dl class="title len">
<span class="sub "><i></i><a href="/{{ v.class.name }}/" target="_blank">{{ v.class.name }}</a></span>
</dl>
<dl class="html nh215">
<dt class="html">
<p><a href="{{ v.url }}" title="{{ v.title }}" target="_blank">{{ v.title }}</a></p>
</dt>
</dl>
</div>
{% else %}
<div class="pnvt_news_model pr0">
<dl class="title">
<span class="sub "><i></i><a href="/{{ v.class.name }}/" target="_blank">{{ v.class.name }}</a></span>
</dl>
<dl class="html nh215">
<dt class="html">
<p><a href="{{ v.url }}" title="{{ v.title }}" target="_blank">{{ v.title }}</a></p>
</dt>
</dl>
</div>
{% endif %}
{% endfor %}

上面代码只能循环出一个栏目,我想循环出所有栏目,并取出该栏目下面5篇文章内容。
下面是想得到的效果源码:

<div class="pnvt_news_model ">
<dl class="title len">
<span class="sub "><i></i><a href="/栏目1/" target="_blank">栏目1</a></span>
</dl>
<dl class="html nh215">
<dt class="html">
<p><a href="" title="标题1" target="_blank">标题1</a></p>
<p><a href="" title="标题1" target="_blank">标题1</a></p>
<p><a href="" title="标题1" target="_blank">标题1</a></p>
<p><a href="" title="标题1" target="_blank">标题1</a></p>
<p><a href="" title="标题1" target="_blank">标题1</a></p>
#这里显示栏目1中的5篇文章取出来
</dt>
</dl>
</div>
<div class="pnvt_news_model pr0">
<dl class="title">
<span class="sub"><i></i><a href="/栏目2/" target="_blank">栏目2</a></span>
</dl>
<dl class="html nh215">
<dt class="html">
<p><a href="" title="标题2" target="_blank">标题2</a></p>
<p><a href="" title="标题2" target="_blank">标题2</a></p>
<p><a href="" title="标题2" target="_blank">标题2</a></p>
<p><a href="" title="标题2" target="_blank">标题2</a></p>
<p><a href="" title="标题2" target="_blank">标题2</a></p>
#这里显示栏目2中的5篇文章取出来
</dt>
</dl>
</div>

求各位大神指点,先谢谢大家的回答

阅读 3.2k
2 个回答

1.先取出所有栏目表,也就是取出class表所有分类 class.query.all() #这个取出来也是list
2.循环这个分类 取出每个分类的5篇文章,然后放到一个list里面

list1 = ["文章1","文章2","文章3","文章4","文章5"]["文章1","文章2","文章3","文章4","文章5"]["文章1","文章2","文章3","文章4","文章5"]  #根据分类循环出来

3.把第一步class取出来的list 和第二部循环出来的弄成个字典

内容大概显示{"栏目1":["文章1","文章2","文章3","文章4","文章5"],"栏目2":["文章1","文章2","文章3","文章4","文章5"]}
test = {"栏目1":["文章1","文章2","文章3","文章4","文章5"],"栏目2":["文章1","文章2","文章3","文章4","文章5"]}

4.页面显示内容

{% for v,k in test.items() %}
<div class="{% if loop.index is odd %}pnvt_news_model{% else %}pnvt_news_model pr0{% endif %}">
<dl class="title len">
<span class="sub "><i></i><a href="/{{ v.name }}" target="_blank">{{ v.txt }}</a></span>
</dl>
<dl class="html nh215">
<dt class="html">
{% for i in k %}
{% if v.id == i.column_id %}
<p><a href="{{ i.url }}" title="{{ i.title }}" target="_blank">{{ i.title }}</a></p>
{% endif %}
{% endfor %}
</dt>
</dl>
</div>
{% endfor %}

暂时只想出这个办法解决,有其他解决办法欢迎指导我。

不是很明白你的问题,但是建议看看 jinja2 语法中关于 for 循环的 loop变量。

循环控制语句及宏(宏类似于Python代码中的函数):

{% macro render_comment(comment) %}
   <li>{{ comment }}</li>
{% endmacro %}
<ul>
   {% for comment in comments %}
     {{ render_comment(comment) }}
   {% endfor %}
</ul>

在一个 for 循环块中你可以访问这些特殊的变量:

变量 描述
loop.index 当前循环迭代的次数(从 1 开始)
loop.index0 当前循环迭代的次数(从 0 开始)
loop.revindex 到循环结束需要迭代的次数(从 1 开始)
loop.revindex0 到循环结束需要迭代的次数(从 0 开始)
loop.first 如果是第一次迭代,为 True 。
loop.last 如果是最后一次迭代,为 True 。
loop.length 序列中的项目数。
loop.cycle 在一串序列间期取值的辅助函数。见下面的解释。

在 for 循环中,可以使用特殊的 loop.cycle 辅助函数,伴随循环在一个字符串/变 量列表中周期取值:

这里估计是你想要的。

{% for row in rows %}
   <li class="{{ loop.cycle('odd', 'even') }}">{{ row }}</li>
{% endfor %}

详情请看 前端模板(web UI)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题