Python烧瓶-使Jinja2模板逻辑免费

Python烧瓶-使Jinja2模板逻辑免费,python,flask,jinja2,Python,Flask,Jinja2,我刚刚开始在Jinja2中使用Python Flask(为不知道的人提供的模板系统),但在模板部分遇到了障碍 因此,考虑到逻辑和模板分离的概念,我试图删除最后一件我发现不可能删除的东西:for循环迭代 我会尽量缩小这个问题 基本上,我有一个定义主页的视图: # front page def front(): # define front page i = db.docs.find() # find docs in db and assign to var "i" docs = [

我刚刚开始在Jinja2中使用Python Flask(为不知道的人提供的模板系统),但在模板部分遇到了障碍

因此,考虑到逻辑和模板分离的概念,我试图删除最后一件我发现不可能删除的东西:for循环迭代

我会尽量缩小这个问题

基本上,我有一个定义主页的视图:

# front page
def front(): # define front page
    i = db.docs.find() # find docs in db and assign to var "i"
    docs = [k for k in i] # iterate over "i" vals and assign to docs which is then iterable
    return render_template('index.html', docs=docs) # render the "index.html" template and make the "docs" variable available for it
然后我有了index.html(仅包括问题的焦点部分):

Localhost-主页
{%for docs%中的doc%}#迭代docs中的每个doc
{%endfor%}

这里的问题是:^是否有一种方法可以在视图中迭代(所有逻辑都应该驻留在其中)并在模板中打印预定义的val(如
{{docs.title}
)?

在模板中循环是很好的;事实上,这是真正应该驻留在模板中的函数之一。另一种方法是预生成视图中的所有
文本。这类似于把马车放在马之前;你真的不想这么做。当人们谈论将逻辑排除在模板之外时,他们谈论的是业务逻辑。如果布局用于构建布局,那么它仍然可以使用条件和循环。为了加强Martijn的注释,业务逻辑应该位于控制器层(称为Flask中的视图),表示逻辑位于视图层(模板)。在控制器中填充表示逻辑是愚蠢的。@user3535094要点是“关注点分离”。与输出格式副本无关的业务逻辑不应该进入模板,但是,您的循环是应该进入模板的完美示例。您不想在
front
中创建html,这正是模板作业。只要看看代码,问问自己:“这是可读的和可维护的吗?”——当它是这样写的时候。
<title> Localhost - Homepage </title>

<div class=doc>
  {% for doc in docs %} # iterate over every doc in docs
      <h4><a 
              href="/post/{{ doc.slug }}/">{{ doc.title }} # get the **doc slug** and **doc title**
          </a>
      </h4>
  {% endfor %}
</div>