Python入門 Djangoを使う(番外編「view must be a callable or a list/tuple in the case of include().」エラー)
Python入門 Djangoを使う(番外編「view must be a callable or a list/tuple in the case of include().」エラー)
はじめに
不定期連載のPython入門第16回目です。今回は前回の記事を作成時にエラーが発生したので、その対応方法についてまとめます。
今回の内容:
・「TypeError: view must be a callable or a list/tuple in the case of include().」エラーが発生した際の対処方法
・「NameError: name ‘sampleApp1’ is not defined」が発生した際の対処方法
url(r'^sample/index', 'sampleApp1.views.index'),
調べてみると、どうやらこの記述はDjangoの古いバージョンでは使えたものの、1.10では使えなくなったようです。
「TypeError」という例外は演算や関数が不適切な型のオブジェクトに適用された場合にスローされる例外です。
「view must be a callable or a list/tuple in the case of include().」というエラーメッセージは、「viewはよびだせる(callable)か、listかtupleになっていなければならない」といったような意味です。
ビューを指定している「’sampleApp1.views.index’」の部分をシングルクォテーションで括ってしまっていることが原因のようです。
そこでシングルクォテーションを外して再びトライしてみたところ、エラー表示が以下のように変わりました。
「NameError: name ‘sampleApp1’ is not defined」
これはsampleApp1というappが未定義であるという内容です。
これは、includeが適切に行えていないことが原因です。
以下の記述をurlpatternsの直前に追加してみました。
import sampleApp1.views
こうすると正常に起動できました。
このように正しくimportすることでこの例外も解消することができます。
上記の記述を以下のように記述することも可能です。
from sampleApp1 import views
こうすることで
url(r'^sample/index', 'sampleApp1.views.index'),
上記の記述を以下のようにできます。
url(r'^sample/index', 'views.index'),
これで前回の内容と同じになりました。
まとめ
今回は番外編ということで、エラーが発生した時の対応方法について記載しました。
これと同じ原因ではない場合も多々あるとは思いますが、同じようなところで嵌っている方がいたら参考にしてください。