teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2021/12/21 01:06

投稿

quickquip
quickquip

スコア11314

answer CHANGED
@@ -10,4 +10,89 @@
10
10
 
11
11
  でしょう。
12
12
 
13
- [https://flask.palletsprojects.com/en/2.0.x/blueprints/#building-urls](https://flask.palletsprojects.com/en/2.0.x/blueprints/#building-urls)
13
+ [https://flask.palletsprojects.com/en/2.0.x/blueprints/#building-urls](https://flask.palletsprojects.com/en/2.0.x/blueprints/#building-urls)
14
+
15
+ ----
16
+
17
+ ![イメージ説明](27403129f38683d8c3b1fa6876865191.png)
18
+
19
+ application.html
20
+ ```html
21
+ <!DOCTYPE html>
22
+ <html lang="ja">
23
+ <head>
24
+ <meta charset="UTF-8">
25
+ <title>{{title}}</title>
26
+ </head>
27
+
28
+ <body>
29
+ {% block body %}
30
+ {% endblock %}
31
+ </body>
32
+ </html>
33
+ ```
34
+
35
+ index.html
36
+ ```html
37
+ {% extends 'application.html' %}
38
+
39
+ {% block body %}
40
+ {% include 'nav.html' %}
41
+ {% endblock %}
42
+ ```
43
+
44
+ nav.html
45
+ ```html
46
+ <nav id="admin_nav">
47
+ <h1>
48
+ </h1>
49
+ <ul class="admin_nav">
50
+ <li class="admin_nav_home">
51
+ <a href="{{ url_for('views.home') }}">Home</a>
52
+ </li>
53
+ </ul>
54
+ </nav>
55
+ ```
56
+
57
+ app.py
58
+ ```python
59
+ from flask import Flask
60
+
61
+ from views import skip_view
62
+
63
+ app = Flask(__name__)
64
+ app.register_blueprint(skip_view.app)
65
+
66
+ if __name__ == "__main__":
67
+ app.run(debug=True)
68
+ ```
69
+
70
+ skip_view.py
71
+ ```python
72
+ from flask import Blueprint, render_template
73
+
74
+ # Blueprintのオブジェクトを生成する
75
+ app = Blueprint('views', __name__)
76
+
77
+
78
+ @app.route('/')
79
+ def home():
80
+ title = "管理画面"
81
+ return render_template('index.html', title=title)
82
+ ````
83
+
84
+ で実行を確認できました。
85
+
86
+ nav.html
87
+ ```html
88
+ <a href="{{ url_for('.home') }}">Home</a>
89
+ ```
90
+ でも動きます。
91
+
92
+
93
+ nav.html
94
+ ```html
95
+ <a href="{{ url_for('home') }}">Home</a>
96
+ ```
97
+
98
+ で`werkzeug.routing.BuildError: Could not build url for endpoint 'home'. Did you mean 'views.home' instead?`が再現できます。