[ad_1]
私が得ているエラー-
werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'home'. Did you mean 'main.home' instead?
私のroutes.pyフォルダーのコード-
Python
from flask import render_template, request, Blueprint from flaskblog.models import Post main = Blueprint('main', __name__) @main.route("/") @main.route("/home") def home(): page = request.args.get('page', 1, type=int) posts = Post.query.order_by(Post.date_posted.desc()).paginate(page=page, per_page=5) return render_template('home.html', posts=posts) @main.route("/about") def about(): return render_template('about.html', title='About')
私のhome.htmlフォルダーのコード-
HTML
{% extends "layout.html" %} {% block content %} {% for post in posts.items %} <article class="media content-section"> <img class="rounded-circle article-img" src="{{ url_for('static', filename='profile_pics/' + post.author.image_file) }}"> <div class="media-body"> <div class="article-metadata"> <a class="mr-2" href="{{ url_for('user_posts', username=post.author.username) }}">{{ post.author.username }}</a> <small class="text-muted">{{ post.date_posted.strftime('%Y-%m-%d') }}</small> </div> <h2><a class="article-title" href="{{ url_for('post', post_id=post.id) }}">{{ post.title }}</a></h2> <p class="article-content">{{ post.content }}</p> </div> </article> {% endfor %} {% for page_num in posts.iter_pages(left_edge=1, right_edge=1, left_current=1, right_current=2) %} {% if page_num %} {% if posts.page == page_num %} <a class="btn btn-info mb-4" href="{{ url_for('home', page=page_num) }}">{{ page_num }}</a> {% else %} <a class="btn btn-outline-info mb-4" href="{{ url_for('home', page=page_num) }}">{{ page_num }}</a> {% endif %} {% else %} ... {% endif %} {% endfor %} {% endblock content %}
私のlayout.htmlフォルダーのコード-
HTML
<!DOCTYPE html> <html> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='main.css') }}"> {% if title %} <title>Flask Blog - {{ title }}</title> {% else %} <title>Flask Blog</title> {% endif %} </head> <body> <header class="site-header"> <nav class="navbar navbar-expand-md navbar-dark bg-steel fixed-top"> <div class="container"> <a class="navbar-brand mr-4" href="/">Flask Blog</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarToggle" aria-controls="navbarToggle" aria-expanded="false" aria-label="Toggle navigation"> </button> <div class="collapse navbar-collapse" id="navbarToggle"> <div class="navbar-nav mr-auto"> <a class="nav-item nav-link" href="{{ url_for('home') }}">Home</a> <a class="nav-item nav-link" href="{{ url_for('about') }}">About</a> </div> <!-- Navbar Right Side --> <div class="navbar-nav"> {% if current_user.is_authenticated %} <a class="nav-item nav-link" href="{{ url_for('new_post') }}">New Post</a> <a class="nav-item nav-link" href="{{ url_for('account') }}">Account</a> <a class="nav-item nav-link" href="{{ url_for('logout') }}">Logout</a> {% else %} <a class="nav-item nav-link" href="{{ url_for('login') }}">Login</a> <a class="nav-item nav-link" href="{{ url_for('register') }}">Register</a> {% endif %} </div> </div> </div> </nav> </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 content %}{% endblock %} </div> <div class="col-md-4"> <div class="content-section"> <h3>Our Sidebar</h3> <p class='text-muted'>You can put any information here you'd like. <ul class="list-group"> <li class="list-group-item list-group-item-light">Latest Posts</li> <li class="list-group-item list-group-item-light">Announcements</li> <li class="list-group-item list-group-item-light">Calendars</li> <li class="list-group-item list-group-item-light">etc</li> </ul> </p> </div> </div> </div> </main> <!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script> </body> </html>
私が試したこと:
私はいくつかのことを試しましたが、いずれも問題を解決できませんでした。 親切に助けてください。
解決策 2
routes.py ファイルのホーム関数は、main という名前の Flask ブループリントの一部として定義されているようです。 設計図を使用する場合、url_for を使用して URL を生成するときに、エンドポイント名の前に設計図の名前を付ける必要があります。
home.html ファイルでは、ブループリントの名前のプレフィックスを付けずに、ホーム エンドポイントの URL を生成しています。 このエラーを修正するには、url_for 呼び出しを更新して、home エンドポイントだけでなく main.home エンドポイントを使用するようにします。
{% extends "layout.html" %} {% block content %} {% for post in posts.items %} <article class="media content-section"> <img class="rounded-circle article-img" src="{{ url_for('static', filename='profile_pics/' + post.author.image_file) }}"> <div class="media-body"> <div class="article-metadata"> <a class="mr-2" href="{{ url_for('user_posts', username=post.author.username) }}">{{ post.author.username }}</a> <small class="text-muted">{{ post.date_posted.strftime('%Y-%m-%d') }}</small> </div> <h2><a class="article-title" href="{{ url_for('post', post_id=post.id) }}">{{ post.title }}</a></h2> <p class="article-content">{{ post.content }}</p> </div> </article> {% endfor %} {% for page_num in posts.iter_pages(left_edge=1, right_edge=1, left_current=1, right_current=2) %} {% if page_num %} {% if posts.page == page_num %} <a class="btn btn-info mb-4" href="{{ url_for('main.home', page=page_num) }}">{{ page_num }}</a> {% else %} <a class="btn btn-outline-info mb-4" href="{{ url_for('main.home', page=page_num) }}">{{ page_num }}</a> {% endif %} {% else %} ... {% endif %} {% endfor %} {% endblock content %}
上記のコードでは、url_for(‘main.home’) 呼び出しが更新され、エンドポイント名 (home) の前にブループリントの名前 (main) が含まれるようになりました。 これにより、表示されている BuildError が修正されるはずです。
解決策 1
次の変更を試してください。
Python
return render_template('main/home.html', posts=posts) # add the 'main/' prefix to the template name.
「約」についても同じです。
[edit]
私のフラスコアプリケーションの構造を見て、「メイン」フォルダに入れたすべてのファイルをフラスコブログに移動することをお勧めします。 私が持っているものは次のとおりです。
Directory of flaskr 07/09/2022 11:59 <DIR> static 07/09/2022 12:00 <DIR> templates 19/07/2022 12:05 1,101 __init__.py 19/07/2022 11:48 2,553 auth.py 19/07/2022 12:22 2,644 blog.py 19/07/2022 11:17 888 db.py 19/07/2022 11:14 435 schema.sql Directory of flaskr\static 19/07/2022 12:01 1,828 style.css Directory of flaskr\templates 07/09/2022 12:01 <DIR> auth 07/09/2022 12:00 <DIR> blog 19/07/2022 11:48 739 base.html Directory of flaskr\templates\auth 19/07/2022 11:55 439 login.html 19/07/2022 11:51 443 register.html Directory of flaskr\templates\blog 19/07/2022 12:10 462 create.html 19/07/2022 12:07 818 index.html 19/07/2022 12:14 716 update.html
名前は異なりますが、その構造はフラスコが機能する標準的な構造のようです。
[/edit]
[ad_2]
コメント