質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

【Flask】Blueprintにて分割するとwerkzeug.routing.BuildErrorが出ます。

退会済みユーザー

退会済みユーザー

総合スコア0

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0評価

0クリップ

362閲覧

投稿2021/12/20 14:25

編集2021/12/21 00:11

解決したいこと

Flaskの使用は初めてで学習用に管理画面の作成をしております。
Internal Server Errorのwerkzeug.routing.BuildErrorにより、web表示ができない状況です。
Blueprintを使用し、起動ファイルとroutingを分割して正常にWebに表示させたいです。
Blueprintを使用する前は、正常に表示されておりました。

階層構造
skip/
├ app.py
├ views/
|└ skip_view.py
└ templates/
|└ application.html
|└ index.html
|└ nav.html

#環境
・CentOS7
・Python3.6
・Flask2.0.2

発生している問題・エラー

[2021-12-18 16:05:55,757] ERROR in app: Exception on / [GET] Traceback (most recent call last): File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 2073, in wsgi_app response = self.full_dispatch_request() File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1518, in full_dispatch_request rv = self.handle_user_exception(e) File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1516, in full_dispatch_request rv = self.dispatch_request() File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1502, in dispatch_request return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args) File "./views/skip_view.py", line 11, in home return render_template('index.html', title=title) File "/usr/local/lib/python3.6/site-packages/flask/templating.py", line 150, in render_template ctx.app, File "/usr/local/lib/python3.6/site-packages/flask/templating.py", line 128, in _render rv = template.render(context) File "/usr/local/lib/python3.6/site-packages/jinja2/environment.py", line 1291, in render self.environment.handle_exception() File "/usr/local/lib/python3.6/site-packages/jinja2/environment.py", line 925, in handle_exception raise rewrite_traceback_stack(source=source) File "/var/www/skip/templates/index.html", line 1, in top-level template code {% extends 'application.html' %} File "/var/www/skip/templates/application.html", line 15, in top-level template code {% block body %} File "/var/www/skip/templates/index.html", line 5, in block 'body' {% include 'nav.html' %} File "/var/www/skip/templates/nav.html", line 7, in top-level template code <a href="{{ url_for('home') }}">Home</a> File "/usr/local/lib/python3.6/site-packages/flask/helpers.py", line 338, in url_for return appctx.app.handle_url_build_error(error, endpoint, values) File "/usr/local/lib/python3.6/site-packages/flask/helpers.py", line 326, in url_for endpoint, values, method=method, force_external=external File "/usr/local/lib/python3.6/site-packages/werkzeug/routing.py", line 2314, in build raise BuildError(endpoint, values, method, self) werkzeug.routing.BuildError: Could not build url for endpoint 'home'. Did you mean 'views.home' instead?

該当するソースコード

▼app.py

from views import skip_view from flask import Flask app = Flask(__name__) # 分割したBlueprintを登録する app.register_blueprint(skip_view.app) if __name__ == "__main__": app.run(debug=True)

▼views/skip_view.py

# import app_logger from flask import Blueprint, render_template, url_for # Blueprintのオブジェクトを生成する app = Blueprint('views', __name__) @app.route('/') def home(): title = "管理画面" # app_logger.logger.info("TOPページ") return render_template('index.html', title=title)

*一部抜粋しております。

▼templates/application.html

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>{{title}}</title> <link rel="stylesheet" href="{{ url_for('static', filename='css/reset.css') }}"> <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}"> <link rel="preconnect" href="https://fonts.gstatic.com"> <!-- <script src="{{ url_for('static', filename='js/index.js') }}"></script> --> <script src="https://kit.fontawesome.com/23659bd18a.js" crossorigin="anonymous"></script> </head> <body> {% block body %} {% endblock %} </body> </html>

▼templates/index.html

{% extends 'application.html' %} {% block body %} <section class="admin"> {% include 'nav.html' %} <div class="right_content"> {% include 'header.html' %} <div id="content"> <div class="home_content"> <div class="user_content"> <h3>ユーザ管理</h3> <a href="{{ url_for('user_edit_form') }}"><p>ユーザ情報の編集</p></a> <a href="{{ url_for('user_list') }}"><p>ユーザ一覧</p></a> </div> <div class="news_content"> <h3>お知らせ管理</h3> <a href="{{ url_for('news_post_form') }}"><p>お知らせ投稿</p></a> <a href="{{ url_for('news_list') }}"><p>お知らせ一覧</p></a> </div> </div> </div> {% include 'footer.html' %} </div> </section> {% endblock %}

▼templates/nav.html

<nav id="admin_nav"> <h1> <img src="{{ url_for('static', filename='images/logo.png') }}"> </h1> <ul class="admin_nav"> <li class="admin_nav_home"> <a href="{{ url_for('home') }}">Home</a> </li> </ul> </nav>

*一部抜粋しております。

自分で試したこと

該当エラーを基に自身で調査してみたのですが、同じようなエラーが見当たらなく解決出来ていない状況です。
@app.route('/')のhome関数とurl_forにて指定している値が間違っているのかと思い、確認してみましたが、特に問題は無いかと思いました。
エラー文に「Did you mean 'views.home' instead?」とありましたので、url_for側をviews.homeと指定してみましたが、こちらも解決には繋がりませんでした。

エラー文から原因箇所は恐らくBlueprintを使用しているskip_view.pyかrender_templateで呼び出しているnav.htmlかと思うのですが、何か原因が分かる方がいらっしゃいましたら、ご教授頂けますと幸いです。
その他に必要な情報がありましたら提示いたします。
よろしくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

quickquip

2021/12/20 23:06

index.html と application.html の中身と場所を書いてください。
退会済みユーザー

退会済みユーザー

2021/12/21 00:12

ご確認頂きありがとうございます。 先ほど、index.htmlとapplication.htmlの中身と階層構造と追記いたしました。 お手数お掛けしますが、よろしくお願いいたします。。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。