回答編集履歴
9
test
CHANGED
@@ -71,4 +71,4 @@
|
|
71
71
|
return render_template('entries/top_page.html', registration_data=entries)
|
72
72
|
```
|
73
73
|
|
74
|
-
(試せていないので、上記で正常に動く
|
74
|
+
(試せていないので、上記で正常に動くかどうかはわかりません)
|
8
test
CHANGED
@@ -39,7 +39,6 @@
|
|
39
39
|
|
40
40
|
# 追記内容について
|
41
41
|
|
42
|
-
断片的なコードだけでは何とも言えませんが、[開示されているコード部分を見る限りでは]実行時に動的に内容が定まると推測される変数(「application」)の属性(「config」)を、インポート時に静的に評価される部分で期待通りに取得しようとするのは無理があると思います。
|
43
42
|
|
44
43
|
下記のように、実行時に、必要な部分で内容を読みだし、設定するようにしてみてはいかがでしょうか。
|
45
44
|
## DB
|
7
test
CHANGED
@@ -39,7 +39,7 @@
|
|
39
39
|
|
40
40
|
# 追記内容について
|
41
41
|
|
42
|
-
断片的なコードだけでは何とも言えませんが、[開示されているコード部分を見る限りでは]実行時に動的に内容が定まると推測される変数(「application」)の属性(「
|
42
|
+
断片的なコードだけでは何とも言えませんが、[開示されているコード部分を見る限りでは]実行時に動的に内容が定まると推測される変数(「application」)の属性(「config」)を、インポート時に静的に評価される部分で期待通りに取得しようとするのは無理があると思います。
|
43
43
|
|
44
44
|
下記のように、実行時に、必要な部分で内容を読みだし、設定するようにしてみてはいかがでしょうか。
|
45
45
|
## DB
|
6
test
CHANGED
@@ -42,7 +42,7 @@
|
|
42
42
|
断片的なコードだけでは何とも言えませんが、[開示されているコード部分を見る限りでは]実行時に動的に内容が定まると推測される変数(「application」)の属性(「table_name」等)を、インポート時に静的に評価される部分で期待通りに取得しようとするのは無理があると思います。
|
43
43
|
|
44
44
|
下記のように、実行時に、必要な部分で内容を読みだし、設定するようにしてみてはいかがでしょうか。
|
45
|
-
##
|
45
|
+
## DB
|
46
46
|
```python
|
47
47
|
from pynamodb.models import Model
|
48
48
|
from pynamodb.attributes import UnicodeAttribute
|
5
追記
test
CHANGED
@@ -36,3 +36,40 @@
|
|
36
36
|
# 略
|
37
37
|
return 'hello world'
|
38
38
|
```
|
39
|
+
|
40
|
+
# 追記内容について
|
41
|
+
|
42
|
+
断片的なコードだけでは何とも言えませんが、[開示されているコード部分を見る限りでは]実行時に動的に内容が定まると推測される変数(「application」)の属性(「table_name」等)を、インポート時に静的に評価される部分で期待通りに取得しようとするのは無理があると思います。
|
43
|
+
|
44
|
+
下記のように、実行時に、必要な部分で内容を読みだし、設定するようにしてみてはいかがでしょうか。
|
45
|
+
## Model
|
46
|
+
```python
|
47
|
+
from pynamodb.models import Model
|
48
|
+
from pynamodb.attributes import UnicodeAttribute
|
49
|
+
|
50
|
+
class DB(Model):
|
51
|
+
class Meta:
|
52
|
+
pass
|
53
|
+
|
54
|
+
def init_db():
|
55
|
+
DB.Meta.table_name = application.config.get('TABLE_NAME')
|
56
|
+
DB.Meta.region = application.config.get('AWS_REGION')
|
57
|
+
DB.Meta.aws_access_key_id = application.config.get('AWS_ACCESS_KEY_ID')
|
58
|
+
DB.Meta.aws_secret_access_key = application.config.get('AWS_SECRET_ACCESS_KEY')
|
59
|
+
|
60
|
+
partition_key = UnicodeAttribute(hash_key=True, null=False)
|
61
|
+
```
|
62
|
+
|
63
|
+
## View
|
64
|
+
```python
|
65
|
+
from sub import DB
|
66
|
+
|
67
|
+
@application.route('/', methods=['GET'])
|
68
|
+
def top_page():
|
69
|
+
DB.init_db()
|
70
|
+
entries = DB_Training.scan()
|
71
|
+
entries = sorted(entries, key=lambda x: x.partition_key, reverse=True)
|
72
|
+
return render_template('entries/top_page.html', registration_data=entries)
|
73
|
+
```
|
74
|
+
|
75
|
+
(試せていないので、上記で正常に動くことは保証できません)
|
4
test
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
main 内で sub がインポートされ、
|
3
3
|
その sub 内で sub2 がインポートされ、
|
4
4
|
その sub2 内で DB クラスが読み込まれます。
|
5
|
-
そして
|
5
|
+
そしてDB クラスが読み込まれる段階で自動的に
|
6
6
|
```
|
7
7
|
table_name = current_app.config['table_name']
|
8
8
|
```
|
9
|
-
が評価されますが、このタイミングでは current_app が空っぽのため、上記のエラーが発生しているのだと思われます。
|
9
|
+
が評価(「実行」)されますが、このタイミングでは current_app が空っぽのため、上記のエラーが発生しているのだと思われます。
|
10
10
|
|
11
11
|
アプリ全体における、sub2 にて定義している `DB` の使われ方が質問文に全く示されていないので何とも言えませんが
|
12
12
|
あくまで現状のコードの限りでは、下記のように必要なときに table_name を設定すればよいのではないのでしょうか。
|
3
test
CHANGED
@@ -1,11 +1,15 @@
|
|
1
|
-
起動時に
|
1
|
+
質問文記載のコードでは、起動時に
|
2
2
|
main 内で sub がインポートされ、
|
3
3
|
その sub 内で sub2 がインポートされ、
|
4
|
-
その sub2 内で DB クラスが読み込まれます
|
4
|
+
その sub2 内で DB クラスが読み込まれます。
|
5
|
+
そしてこの段階で自動的に
|
6
|
+
```
|
7
|
+
table_name = current_app.config['table_name']
|
8
|
+
```
|
5
|
-
このタイミングでは current_app が空っぽのため、上記のエラーが発生しているのだと思われます。
|
9
|
+
が評価されますが、このタイミングでは current_app が空っぽのため、上記のエラーが発生しているのだと思われます。
|
6
|
-
|
10
|
+
|
7
11
|
アプリ全体における、sub2 にて定義している `DB` の使われ方が質問文に全く示されていないので何とも言えませんが
|
8
|
-
あくまで現状のコードの限りでは、下記のように
|
12
|
+
あくまで現状のコードの限りでは、下記のように必要なときに table_name を設定すればよいのではないのでしょうか。
|
9
13
|
|
10
14
|
sub2.py
|
11
15
|
```python
|
2
test
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
+
起動時に
|
1
|
-
main
|
2
|
+
main 内で sub がインポートされ、
|
2
|
-
その sub内
|
3
|
+
その sub 内で sub2 がインポートされ、
|
4
|
+
その sub2 内で DB クラスが読み込まれますが、
|
3
|
-
|
5
|
+
このタイミングでは current_app が空っぽのため、上記のエラーが発生しているのだと思われます。
|
4
6
|
|
5
7
|
アプリ全体における、sub2 にて定義している `DB` の使われ方が質問文に全く示されていないので何とも言えませんが
|
6
|
-
あくまで現状のコードの限りでは、下記のように**必要なときに table_name を設定すればい
|
8
|
+
あくまで現状のコードの限りでは、下記のように**必要なときに table_name を設定すればよい**のではないのでしょうか。
|
7
9
|
|
8
10
|
sub2.py
|
9
11
|
```python
|
@@ -25,7 +27,8 @@
|
|
25
27
|
|
26
28
|
@application_sub.route('/')
|
27
29
|
def top_page():
|
28
|
-
DB.initdb() # 追加(たとえばここでDBを使いたいというとき)
|
30
|
+
DB.initdb() # 追加(たとえばここ以降でDBを使いたいというとき)
|
29
|
-
# 以下DBを使った処理
|
31
|
+
# 以下DBを使った処理。詳細は質問文に記載がないため不明。
|
32
|
+
# 略
|
30
33
|
return 'hello world'
|
31
34
|
```
|
1
test
CHANGED
@@ -25,6 +25,7 @@
|
|
25
25
|
|
26
26
|
@application_sub.route('/')
|
27
27
|
def top_page():
|
28
|
-
DB.initdb() # 追加
|
28
|
+
DB.initdb() # 追加(たとえばここでDBを使いたいというとき)
|
29
|
+
# 以下DBを使った処理
|
29
30
|
return 'hello world'
|
30
31
|
```
|