变量未显示在 Flask 模板中

Posted

技术标签:

【中文标题】变量未显示在 Flask 模板中【英文标题】:Variable is not shown in Flask template 【发布时间】:2014-05-10 23:26:03 【问题描述】:

我是模板引擎的新手,需要更聪明的人的帮助。尝试使用 Flask 模板生成搜索结果,遇到了很多痛苦。烧瓶:

@app.route('/*?search', methods=['POST', 'GET'])
    if request.method == 'GET':
        if request.args.get('q'):

            qList = re.sub("[^\w]", " ",  request.args.get('q') ).split()

            htmlA = """
                    <div class="results" > 
                    <p>

                    """
            htmlB = """
                    </p>
                    <br></br>
                    </div>
                    """
            found = None
            for it in qList :
                found = htmlA + RESULT_BLAH_BLAH_METHOD( it ) + htmlB

            return render_template( 'list_of_found_items.html', found=found )

和html模板部分:

<somewhere in html>
    % block content %
         found 
    % endblock %
</somewhere in html>

这样,即使结果存在并通过打印到控制台输出进行检查,结果也不会显示在页面上。我错过了什么?谢谢。

【问题讨论】:

什么是L?是空的吗? rez 应该是什么? 谢谢。我刚刚编辑过,但没有显示出来。 render_template('...', found) => render_template('...', found=found) 否则模板不知道found 是什么。 这是因为自动转义。 flask 认为您的格式(围绕 qList 值的 for 循环)应该在模板中。将 qList 直接传递给您的模板并在那里进行格式化。 【参考方案1】:

自动转义防止直接在 python 中编写 HTML。您的代码可以重写为:

qList = re.sub("[^\w]", " ",  request.args.get('q') ).split()
return render_template('list_of_found_items.html', items = map(RESULT_BLAH_BLAH_METHOD, qList))

还有下面的模板

<somewhere in html>
    % block content %
        % for item in qList %
            <div class="results" >
                <p>item</p>
                <br></br>
            </div>
        % endfor %
    % endblock %
</somewhere in html>

【讨论】:

由于某种原因 TypeError: 'str' object is not callable - at "map()" 函数。正在寻找原因.. 我做了一个简单的列表,它可以在没有“map()”的情况下工作。我可以以其他方式实现我的功能。认为它“已解决”,感谢您的宝贵时间。

以上是关于变量未显示在 Flask 模板中的主要内容,如果未能解决你的问题,请参考以下文章

在渲染模板中将变量从python(flask)传递给HTML?

测试开发Flask入门之模板:过滤器

Flask教程11模板

Flask - 访问模板中的配置变量

Flask之模板之特殊变量和方法

flask模板的基本用法模板语法渲染模板模板辅助工具