如何在html模板url_for中访问变量

时间:2018-01-15 15:22:32

标签: python flask jinja2 werkzeug

我为我的Devops课程建立了一个类似Netflix的网站。我制作了一个Python列表(Mockfilms)来定义我的电影,并希望用评论填充数据库(评级)以准备以以下格式发送数据:filmid :: userid :: rating:到推荐引擎。

我的索引页面是一个电影图像列表,其中包含每个评论表单下的评论表单的链接。我希望每个评论表单都显示在不同的URL上(/ review / ID,其中ID作为oid保存在mockfilms中)。为了做到这一点,我想访问mockfilms.oid,然后将其传递给view函数以生成表单的url。表单完成后,我想将此ID添加到评级数据库。以下是我到目前为止的情况:

指数:

{% extends "base.html" %}

{% block content %}
    <h1>Hello, {{ current_user.username }}! Welcome to our extensive video library:</h1>
    {% for film in mockfilms %}
    {% set ID = film.oid %}
    <div>
        <a href = {{ film.video }}>
            <img src = {{ film.image }} alt = "doh" style = "width:200px;height:200px;border:0;">
        </a>
    </div>
    <div>

        <a href={{ url_for('review', ID) }}"> ">Leave a review here!</a>
    {% endfor %}
{% endblock %}

路线:

@app.route('/review/<ID>', methods = ['GET', 'POST'])
@login_required
def review(ID):
    form = ReviewForm()
    if form.validate_on_submit():
        review = Ratings(User_id = current_user.id, Score_given = form.score.data, Film_id = ID)
        db.session.add(review)
        db.session.commit()
        flash('Thanks for your review')
        return redirect(url_for('index'))
    return render_template('review.html', title='Review Page', form=form)

以下错误是我运行时得到的错误:

文件&#34; /home/jc/Desktop/Lokal/DevopsAssig/microblog/Kilfinnan/lib/python3.5/site-packages/werkzeug/routing.py" ;,第1768行,在构建中     引发BuildError(端点,值,方法,自我) werkzeug.routing.BuildError:无法为端点构建网址&#39;审核&#39;。您是否忘记指定值[&#39; ID&#39;]?

由此我假设问题在于此模板中的ID变量。我的搜索和学习让我相信索引模板中的{%set%}会让我声明ID变量,然后在动态中使用它。

2 个答案:

答案 0 :(得分:0)

尝试在url_for函数中提供<a href={{ url_for('review', ID=ID) }}"> ">Leave a review here!</a> 个参数。

像这样的东西

Flask

另外Subtotal(9,C2:C500)有很好的文档,Flask docs

答案 1 :(得分:0)

试试这个:

url_for()

最终你的解决方案非常接近,但是当你需要使用参数的关键字将变量传递给{% set ID = film.oid %}函数时,没有必要使用Jinja set命令。你仍然可以使用{{1}}来做,但这有点多余。