werkzeug.routing.BuildError render_template не возвращает html код файла - PullRequest
0 голосов
/ 07 января 2020

werkzeug.routing.BuildError: Не удалось создать URL для конечной точки 'home'. Вместо этого вы имели в виду «upload_file»?

render_template не возвращает файл html, мой текущий код выглядит так в файле rout.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 код напрямую работает, но не возвращает файл. html через render_template

My newabout. html файл - это просто заголовок h1

{%extends "base.html"%}



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

{%endblock%}

My Файл 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 │ ├───статический │ ├─── шаблоны 10 └─── pycache └─── pycache

Вот моя база. html file

<!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>

Я все еще новичок ie, поэтому любая помощь будет высоко оценена, спасибо:)

1 Ответ

1 голос
/ 07 января 2020

href = "{{url_for ('home')}}"> Home

Измените это на

href = "{{url_for ('about')}}"> Home

Поскольку у вас нет функции home в маршрутах. Аналогичным образом исправьте другие url_for в базе. html или создайте маршруты в rout.py

...