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」が発生した際の対処方法

エラーが起こった際の記述はurls.pyに以下のように記述していたときでした。

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'),

これで前回の内容と同じになりました。

まとめ

今回は番外編ということで、エラーが発生した時の対応方法について記載しました。
これと同じ原因ではない場合も多々あるとは思いますが、同じようなところで嵌っている方がいたら参考にしてください。

[Unity_728×90]

Python入門シリーズ一覧

  • Python入門 pythonとは?
  • Python入門 pythonでHelloWorld
  • Python入門 pythonで文字列操作
  • Python入門 pythonで文字列操作その2
  • Python入門 pythonで日付の操作
  • Python入門 MacにPython3.5.1をインストールする手順まとめ
  • Python入門 SQLiteに接続する
  • Python入門 Getリクエスト送信(requestsを利用)
  • Python入門 MySQLに接続する
  • Python入門 Djangoを使う(その1)
  • Python入門 Djangoを使う(その2)
  • Python入門 Djangoを使う(その3)
  • Python入門 Djangoを使う(その4)
    • このエントリーをはてなブックマークに追加

    PAGE TOP