繁体   English   中英

使用 HTML 和 Flask 传递信息

[英]Passing information using HTML and Flask

我正在从事一个涉及记录电影的 uni 项目,有点像 Letterboxd。 我创建了一个搜索页面,用户在查找电影时输入关键字,然后打印由 tmdb api 提供的结果。 以下是我的 routes.py 文件中用于搜索和结果页面的代码:

@app.route('/search-movie', methods=['GET', 'POST'])
def m_search():
    form = MovieSearch()
    if form.validate_on_submit():
        user_search = urllib.parse.quote(form.movieName.data)
        complete_url = search_url + user_search + "&page=1"
        conn = urllib.request.urlopen(complete_url)
        json_data = json.loads(conn.read())
        return render_template('search_results.html', results=json_data["results"], term=form.movieName.data)
    return render_template('movie_search.html', form=form)

以下是该页面的 html 文件中的代码:

{% block content %}
    <h1> results for "{{term}}"</h1>
    <h2> click movie name to log it</h2>
        <div class="movie-list-container">
            {% for movie in results %}
            <div class="movie-card">
                <img src="https://image.tmdb.org/t/p/w500/{{movie.poster_path}}" alt="">
                <!-- <h3> {{movie.title}} ({{movie.release_date[:4]}})</h3> -->
                <h3><a class="log-link" href="{{ url_for('log_movie', movieid=movie.id) }}"> {{movie.title}} ({{movie.release_date[:4]}}) </a></h3>
            </div>
            {% endfor %}
        </div>
{% endblock %}

正如您在我注释掉的行中看到的那样,以前它只会显示电影标题和发行年份。 但是我想改变的是,如果用户按下电影名称,他们会被带到一个页面,在该页面中,他们会通过表单添加信息,例如他们的评分、观看电影的日期和评论。 这就是在 Letterboxd 上完成的方式,我希望我的几乎相同。

我希望能够在日志页面上显示他们按下的电影的电影名称、发行日期和海报,我在 h3 中通过传递 movieid=movie.id 进行了尝试。 从那里在我的 routes.py 文件中,我编写了以下代码

@app.route('/log-movie', methods=['GET', 'POST'])
def log_movie(movieid):
    log_url = info_url + movieid + "?api_key=" + api_key
    conn = urllib.request.urlopen(log_url)
    json_data = json.loads(conn.read())
    form = LogMovie()
    if form.validate_on_submit():
        log_data = Diary(date_watched=form.dateWatched.data, movie_name=mname, release_date=myear, user_rating=form.movieRating.data, 
            rewatch=form.movieRewatch.data, review=form.movieReview.data, logger=current_user)
        db.session.add(log_data)
        db.session.commit()
        return redirect(url_for('home'))
    return render_template('log_movie.html', form=form, results=json_data["results"])

我的想法是简单地获取 movieid,这样我就可以再次从 api 请求信息,这样我就可以像在上面添加的 html 代码中显示结果时那样传递它。

存储到数据库时,我有变量 mname,myear。 这些来自之前的尝试,我希望从 HTML 中传递电影年份和发布日期,而无需在 routes.py 中再次调用 api。 当我无法让多个变量通过时,我将其更改为仅movieid。 我忘了把这些改回来,但如果我设法从 HTML 传递信息,我可以把 go 改回这个版本。

我不断收到错误 TypeError: log_movie() missing 1 required positional argument: 'movieid' 而且我似乎无法在谷歌上找到答案。 我想知道是否有人知道为什么,或者有更好的方法来实现我想要的?

我以前从未问过问题,所以如果我需要提供更多信息,请告诉我。

非常感谢: :)

@app.route('/log-movie', methods=['GET', 'POST'])
def log_movie(movieid):

我只是指出这一点。 这就是你的错误所在。 如果你想在这里获取movieid,你的路线应该是

@app.route('/log-movie/<movieid>', methods=['GET', 'POST'])

这样,如果你 GET /log-movie/12345,movieid 将是 12345。

编辑:为了清楚起见,我只是指出你的错误在哪里,如果你需要更多帮助,你仍然可以发表评论,我会编辑我对其他问题的回答:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM