【问题标题】:werkzeug.routing.BuildError render_template not returning html file codewerkzeug.routing.BuildError render_template 不返回 html 文件代码
【发布时间】:2020-04-24 17:41:48
【问题描述】:

werkzeug.routing.BuildError:无法为端点“家”构建 url。您指的是“upload_file”吗?

render_template 没有返回 html 文件,我当前的代码在 routes.py 文件中是这样的

from flask  import  render_template , url_for , flash , redirect , request
from flaskblog import app , db , bcrypt
from flaskblog.forms import RegistrationForm , LoginForm 
from flaskblog.models import User , Post
from flask_login import login_user
from flask import Flask, jsonify
from flask import Flask, request, jsonify
import pandas as pd





@app.route("/upload", methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        print(request.files['file'])
        f = request.files['file']
        data_xls = pd.read_excel(f)

        return data_xls.to_html()
    return'''

    <!doctype html>
    <title>Upload an excel file</title>
    <h1>Excel file upload (csv, tsv, csvz, tsvz only)</h1>
    <form action="" method=post enctype=multipart/form-data>
    <p><input type=file name=file><input type=submit value=Upload>
    </form>
    '''


@app.route('/')
@app.route('/newabout')
def about():
    return render_template('newabout.html' , title = "About")

当我直接返回 html 代码时它可以工作,但它不会通过 render_template 返回 .html 文件

我的 newabout.html 文件只是 h1 标题

{%extends "base.html"%}



{%block body%}
<h1>About Page</h1>

{%endblock%}

我的init.py文件是这样的

from flask import Flask
from flask_sqlalchemy import SQLAlchemy  
from flask_bcrypt import Bcrypt
from flask_login import LoginManager


app = Flask(__name__)
app.config['SECRET_KEY'] ='8501dc446e46a15de4390e177dfa973d'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
db = SQLAlchemy(app)
bcrypt = Bcrypt(app)
login_manager = LoginManager(app)

from flaskblog import routes

我目前的树形结构是这样的,所有的 .py 文件都在 flaskblog 中

E:. ├────.vscode ├───flaskblog │ ├───静态 │ ├───模板 │ └───pycache └────pycache

这是我的 base.html 文件

<!DOCTYPE html>
<html lang="en">
<head>

    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
    <!-- <link rel="stylesheet" type="text/css" href="{{url_for('static',filename='main.css')}}"> -->
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">

    {%if title %}
        <title>Flask Blog - {{title}} </title>
    {%else%}
        <title>Flask Blog</title>
    {% endif %}

</head>

<body>

    <header  
    class="site-header" >

        <div class="d-flex flex-column flex-md-row align-items-center p-3 px-md-4 mb-3 bg-white border-bottom shadow-sm">
            <img src="https://pbs.twimg.com/profile_images/1148174028756176896/NJ0owBSm.jpg" alt="Eobi Logo" style="width:120px;height:120px;">
            <a class="my-0 mr-md-auto p-2 text-dark"  href="/">EOBI</a>
            <nav class="my-2 my-md-0 mr-md-3">
              <a class="p-2 text-dark" href="{{url_for('home')}}">Home</a>
              <a class="p-2 text-dark" href="{{url_for('about')}}">About</a>
            </nav>
            <nav class="my-2 my-md-2 mr-md-3">
            <a class="btn btn-primary" href="{{url_for('register')}}">Sign up</a>
            <a class="btn btn-outline-primary" href="{{url_for('login')}}">Sign in</a>
        </nav>   
        </div>
    </header>
    <main role="main"  class="container">
        <div class="row">
            <div class="col-md-8">
            {% with messages = get_flashed_messages(with_categories=true) %}
                {% if messages%}
                    {%for category , message in messages %}
                        <div class="alert alert-{{category}}">
                            {{message}}
                            </div>
                        {%endfor%}
                    {%endif%}
                {%endwith%}
                {% block body%} {% endblock body%}
            </div>

        </div>
</main>



    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
</body>
</html>

我还是一个新手,所以任何帮助将不胜感激谢谢:)

【问题讨论】:

  • 分享 HTML 需要检查你使用的是什么 URL_for 路由,URL_for 应该包含函数名而不是路由路径
  • base.HTML 是什么?
  • 嗨 vikas,我也尝试过使用 return redirect(url_for('about')),但似乎效果不佳
  • 分享 base.html 代码以进一步检查
  • 查看base.html后需要检查

标签: python templates flask jinja2 render


【解决方案1】:

href="{{url_for('home')}}">首页

把这个改成

href="{{url_for('about')}}">首页

由于您在 routes 中没有 home 功能。类似地在 base.html 中修复其他 url_for 或在 routes.py 中创建路由

【讨论】:

  • 嘿,你在说这些台词吗? &lt;a class="p-2 text-dark" href="{{url_for('home')}}"&gt;Home&lt;/a&gt; &lt;a class="p-2 text-dark" href="{{url_for('about')}}"&gt;About&lt;/a&gt;
  • 是的在 url_for 它总是函数名而不是 rotue
  • 谢谢你是对的,我的旧函数名称是 home,当它更改为 upload_file 时,我没有更改函数名称,再次感谢 :)
猜你喜欢
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 2014-01-18
  • 1970-01-01
  • 2017-06-25
  • 2017-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多