當通過用戶輸入提交資料并且資料與 mongodb 集合中的任何內容都不匹配時,Jinja 模板會拋出錯誤(TypeError: 'NoneType' object is not subscriptable)但是當資料存在于集合中時,資料會加載到模板而沒有任何問題,我不知道如何處理這個錯誤。以及如何在提交后重繪 頁面,因為重新加載頁面后搜索輸入的結果不會消失。任何幫助將不勝感激,并提前致謝。
這是我的 Python 代碼:
import os
from datetime import datetime
from flask import (
Flask, flash, render_template,
redirect, request, session, url_for)
from flask_pymongo import PyMongo
from bson.objectid import ObjectId
from werkzeug.security import generate_password_hash, check_password_hash
if os.path.exists("env.py"):
import env
app = Flask(__name__)
app.config["MONGO_DBNAME"] = os.environ.get("MONGO_DBNAME")
app.config["MONGO_URI"] = os.environ.get("MONGO_URI")
app.secret_key = os.environ.get("SECRET_KEY")
mongo = PyMongo(app)
@app.route("/")
@app.route("/home", methods=["GET", "POST"])
def home():
return render_template("home.html")
@app.route("/search", methods=["GET", "POST"])
def search():
query = request.form.get("company-name")
company = mongo.db.company.find_one(
{"company_name": query})["company_name"]
if company:
review = list(mongo.db.review.find({"company_name": company}))
else:
return redirect(url_for("home"))
return render_template("home.html", review=review)
html Jinja 模板
<form class="serach-form" method="POST" action="{{ url_for('search') }}">
<label class="search-bar-label" name="company-name" for="company-
name">Company Name</label>
<input type="text" id="company-name" name="company-name">
<button class="serch-button btn light-blue accent-4" type="submit"
name="action"><span>Search</span>
<i class="fas fa-sign-in-alt sign-in-icon"></i><i class="fas fa-
search search-icon"></i>
</button>
</form>
<div>
{% if review|length > 0 %}
{% for set in review %}
<strong>{{ set.company_name }}</strong> <br>
<strong>{{ set.username }}</strong><br>
<strong>{{ set.score }}</strong><br>
<strong>{{ set.review_content }}</strong><br>
{% endfor %}
{% else %}
<h3 class="red-text text-darken-4 center-align">No Results Found</h3>
{% endif %}
</div>
uj5u.com熱心網友回復:
我找到了解決方案,但仍然不知道我寫的代碼有什么問題。
蟒蛇代碼
@app.route("/search", methods=["GET", "POST"])
def search():
query = request.form.get("company-name")
review = list(mongo.db.review.find(
{"company_name": query}))
return render_template("home.html", query=query, review=review)
html :
<div id="review-search">
{% if review|length > 0 %}
<h2 class="black-text text-darken-4 center-align review-search-
heading">Results for <span class="found"> {{ query }} </span>
</h2>
<h3> total {{ total_score }}</h3>
{% for set in review %}
<div class="row top-margin hot-company">
<div class="col m8 s10 offset-m2 offset-s1 grey lighten-5">
<div class="row">
<div class="col s10 offset-s1 blue-text">
<h5>{{ set.username }}</h5>
</div>
</div>
<div class="row">
<div class="col s10 offset-s1 red-text">
<p>{{ set.score }}/10</p>
</div>
</div>
<div class="row">
<div class="col s10 offset-s1">
<p>{{ set.review_content }}</p>
</div>
</div>
</div>
</div>
{% endfor %}
{% else %}
<h2 class="red-text text-darken-4 center-align review-search-
heading">No Results Found for <span> "{{ query }}"</span>
</h2>
{% endif %}
</div>
uj5u.com熱心網友回復:
利用
try:
// task1
except:
// executed when there's runtime error while doing task1
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/388402.html
下一篇:Flaskmake_server總是引發“OSError:[Errno98]Addressalreadyinuse”
