【问题标题】:NameError in flask烧瓶中的名称错误
【发布时间】:2020-12-26 12:29:36
【问题描述】:

我是编码新手,我正在尝试做我的第一个项目。我想制作一个电影搜索应用程序,但它总是给我错误。我得到 NameError: name 'movie' is not defined 和 UndefinedError: object has no atribute "plot"。我该如何解决这些错误?如果没有情节属性,我可能应该提出一个条件?

我认为这不是最好的做事方式,所以我会很感激任何建议。

这是我的代码:

from flask import Flask, render_template, request
from imdb import IMDb

app = Flask(__name__)


@app.route("/", methods=["POST", "GET"])
def home():
    global movie, movie_two, movie_three
    if request.method == "POST":
        instance = IMDb()
        search = request.form.get("name")
        movie = instance.search_movie(search)

        movie_three = []

        for i in range(len(movie)):
            id_number = movie[i].movieID
            movie_two = instance.get_movie(id_number)
            movie_three.append(movie_two)

    return render_template("home.html", movie=movie, movie_two=movie_two, movie_three=movie_three)


if __name__ == "__main__":
    app.run(debug=True)

home.html

{% extends "base.html" %}
{% block content%}
<div align="center" >
    <h1>Something To Watch</h1>
    <div class="container">
        <form class="search" action="{{url_for('home')}}" method="post">
            <input type="search" placeholder="Type here..." name="name" >
            <button type="submit" value="submit">Search</button>
        </form>
    </div>
</div>


{% for m in movie_three %}
<div class="row">
    <div  align="center" class="card" style="width: 15rem;">
        <img class="card-img-top" src={{m["cover"]}} alt="Card image cap">
        <div class="card-body">
            <h5 class="card-title">{{m["title"]}}</h5>
            <h6 class="card-subtitle mb-2 text-muted">{{m["year"]}}</h6>
            <h6 class="card-subtitle mb-2 text-muted">{{m["kind"]}} - {{m["genres"]}}</h6>
            <h6 class="card-subtitle mb-2 text-muted">{{m["rating"]}}</h6>
            <p class="card-text">{{m["plot"][0]}}</p>


            <a href=# class="card-link">Go to IMDb</a>
            <a href="{{url_for('home')}}" class="card-link">Homepage</a>
        </div>
    </div>
</div>
 {%endfor%}

{% endblock %}

错误:

File "C:\Users\korisnik\PycharmProjects\pythonProject\venv\Lib\site-packages\flask\app.py", line 2464, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Users\korisnik\PycharmProjects\pythonProject\venv\Lib\site-packages\flask\app.py", line 2450, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\korisnik\PycharmProjects\pythonProject\venv\Lib\site-packages\flask\app.py", line 1867, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\korisnik\PycharmProjects\pythonProject\venv\Lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "C:\Users\korisnik\PycharmProjects\pythonProject\venv\Lib\site-packages\flask\app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\korisnik\PycharmProjects\pythonProject\venv\Lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\korisnik\PycharmProjects\pythonProject\venv\Lib\site-packages\flask\app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\korisnik\PycharmProjects\pythonProject\venv\Lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "C:\Users\korisnik\PycharmProjects\pythonProject\venv\Lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\korisnik\PycharmProjects\pythonProject\venv\Lib\site-packages\flask\app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "C:\Users\korisnik\PycharmProjects\pythonProject\app.py", line 36, in home
return render_template("home.html", movie=movie, movie_two=movie_two, movie_three=movie_three)
NameError: name 'movie' is not defined

【问题讨论】:

  • 如果请求方式不是POST,那么返回的所有参数都是未定义的。

标签: python flask


【解决方案1】:

这是因为您的所有变量都在 if request.method == "POST": 块内定义。尝试设置另一个条件来处理 GET 请求并使用它仅呈现 home.html

代码:

from flask import Flask, render_template, request
from imdb import IMDb

app = Flask(__name__)


@app.route("/", methods=["POST", "GET"])
def home():
    global movie, movie_two, movie_three
    if request.method == "POST":
        instance = IMDb()
        search = request.form.get("name")
        movie = instance.search_movie(search)

        movie_three = []

        for i in range(len(movie)):
            id_number = movie[i].movieID
            movie_two = instance.get_movie(id_number)
            movie_three.append(movie_two)

        return render_template("home.html", movie=movie, movie_two=movie_two, movie_three=movie_three)
    else:
        return render_template("home.html")


if __name__ == "__main__":
    app.run(debug=True)

【讨论】:

  • 现在我得到了这个类型错误:quote_from_bytes() 这行的预期字节数:movie = instance.search_movie(search)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-10
  • 2018-09-14
  • 2020-12-06
  • 1970-01-01
  • 1970-01-01
  • 2018-09-12
相关资源
最近更新 更多