【问题标题】:Unable to use Jinja templating to pass variable from Starlette backend to Javascript frontend无法使用 Jinja 模板将变量从 Starlette 后端传递到 Javascript 前端
【发布时间】:2019-12-07 02:15:46
【问题描述】:

我正在使用 starlette ASGI 框架并希望呈现 HTML 响应。

使用下面的虚拟路由来测试将变量传递到 javascript 前端。

@app.route('/error')
async def server_error(request):    
    template = 'analyze_response.html'
    context = {"request": request}
    return templates.TemplateResponse(template, context, data=75)

这是我的“analyze_response.html”文件:

<html lang='en'>
<head>
    <meta charset='utf-8'>
    <link rel='stylesheet' href='../static/style.css'>
    <script src='../static/client.js'></script>
    <link rel="stylesheet" href="../static/cmGauge.css">
    <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
    <script src="../static/cmGauge.js"></script>
    <script type="text/javascript">
        var data = {{ data|tojson }}            
    </script>
    <script type="text/javascript" src="app.js"></script>
</head>
<body>
    <div>
        <div class='center'>
            <div class='title'>Sentiment Analysis of Movie Reviews</div>
            <div class='content'>
                <form action="/analyze" class="form" method="post">
                    <div class="form-group">                            
                        <textarea rows = "10" cols = "100" name = "review_text"></textarea><br>
                    </div> 
                    <div class='analyze'>
                        <input type="submit" class="form-submit-button" value="Analyze">
                    </div>
                </form>                    
                <div id="gaugeDemo" class="gauge gauge-big gauge-green">
                    <div class="gauge-arrow" data-percentage="40"
                        style="transform: rotate(0deg);"></div>
                </div>
                <script type="text/javascript">
                    $('#gaugeDemo .gauge-arrow').cmGauge();
                    $('#gaugeDemo .gauge-arrow').trigger('updateGauge', myFunc());
                </script>                
            </div>
        </div>
    </div>
</body>

根据answers 的一些人,我尝试了所有方法,但仍然无法正常工作。

出现以下错误:

文件“app/server.py”,第 125 行,在 server_error 中 return templates.TemplateResponse(template, context, data=data) TypeError: TemplateResponse() got an unexpected keyword argument '数据'

你能告诉我问题是什么吗?谢谢。

【问题讨论】:

    标签: python jinja2 starlette


    【解决方案1】:

    您需要在context 变量中传递它:

    @app.route('/error')
    async def server_error(request):    
        template = 'analyze_response.html'
        context = {'request': request, 'data': 75}
        return templates.TemplateResponse(template, context)
    

    【讨论】:

    • 感谢您的回复。然而,我将 frm starlette 切换到了烧瓶,一切都开箱即用。
    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 2020-07-08
    • 2019-01-26
    • 1970-01-01
    • 2013-03-26
    相关资源
    最近更新 更多