回答編集履歴

2

削除

2020/03/17 02:35

投稿

quickquip
quickquip

スコア11235

test CHANGED
@@ -69,7 +69,3 @@
69
69
  ```
70
70
 
71
71
  となっていてこのコードで、ifタグの中で評価途中にVariableDoesNotExist例外が起きた式がNoneになるものと思われます。
72
-
73
-
74
-
75
- 一般にundocumentedな仕様を当てにする行為は危険なわけですが、じゃあ他にどうすればいいのかというと答えはないかと。

1

追記

2020/03/17 02:35

投稿

quickquip
quickquip

スコア11235

test CHANGED
@@ -21,3 +21,55 @@
21
21
  ```
22
22
 
23
23
  でいいです(が、存在しない属性にアクセスするとNoneを返す、という仕様がドキュメントのどこに書いてあるのかは謎でした)。
24
+
25
+
26
+
27
+ ----
28
+
29
+
30
+
31
+ (追記)
32
+
33
+
34
+
35
+ 色々と気になったのでソースを追うと、
36
+
37
+
38
+
39
+ [https://github.com/django/django/blob/3.0.4/django/template/defaulttags.py#L876](https://github.com/django/django/blob/3.0.4/django/template/defaulttags.py#L876)
40
+
41
+ ```python
42
+
43
+ def eval(self, context):
44
+
45
+ return self.value.resolve(context, ignore_failures=True)
46
+
47
+ ```
48
+
49
+ していて
50
+
51
+
52
+
53
+ [https://github.com/django/django/blob/3.0.4/django/template/base.py#L673](https://github.com/django/django/blob/3.0.4/django/template/base.py#L673)
54
+
55
+ ```python
56
+
57
+ try:
58
+
59
+ obj = self.var.resolve(context)
60
+
61
+ except VariableDoesNotExist:
62
+
63
+ if ignore_failures:
64
+
65
+ obj = None
66
+
67
+ (以下略)
68
+
69
+ ```
70
+
71
+ となっていてこのコードで、ifタグの中で評価途中にVariableDoesNotExist例外が起きた式がNoneになるものと思われます。
72
+
73
+
74
+
75
+ 一般にundocumentedな仕様を当てにする行為は危険なわけですが、じゃあ他にどうすればいいのかというと答えはないかと。