===ハンズオンの課題その1pinaxのbasic_projectのprofileをcomplete_projectのprofileに変更するをやってみたいと思います。以下動画、http://www.ueblog.org/media/static/django6_1/d21.swfhttp://www.ueblog.org/media/static/django6_1/d22.swfhttp://www.ueblog.org/media/static/django6_1/d23.swf今回はYouTubeにもアップしてみました。%})のnameの逆引きエラーを見つけるtemplatesを置く場所の確認などを行っています。やってますが基本的にはどれも「Djangoプロジェクトの名前空間」の問題になります。今回の例ではpinaxの外部から何か別のソースを用意したり、新しいコードを書いたわけでもないのですが、complete_projectからは見えたappやtemplateがbasic_projectからは見えないという事例がいくつもありました。この差がちゃんと理解できるようになればDjangoのプロジェクトで、どこになにを置いたらいいのか?または、置いてあるappやtemplateを使うためにはどうしたらいいのかが分かるようになると思います。startproject」で作ったプロジェクトでは見えない位置に置いたアプリやライブラリを読み込んでいます。複数のProjectで共有しているDjangoのアプリの置き方などが分かるようになると思います。順番に見ていきましょう。前回動かしたpinax/projects/basic_projectをpinax/project/basic_project_2という名前でコピーして、syncdb&runserveをします。0.0.0.0:8001しかし、ここではエラーが発生します。basic_project.urlこれは、basic_project/urls.pyを探したけど見つからなかったというエラーです。いま動かしているのはbasic_project_2なので、basic_projectは現在のプロジェクトの名前空間にはないわけです。basic_project_2/urls.pyなので、それをDjangoに教えなくはいけません。'basic_project_2.urls'と設定してあげればOKです。Djangoはsettings.pyの置いてあるプロジェクトは見えても、その隣にあるプロジェクトは見えないことがポイントです。このROOT_URLCONFは何かというと、ブラウザ等でアクセスがきたときのURLによって、それぞれ違う画面を表示するのがWEBアプリなのですが、その振り分けをするモジュールを設定しています。direct_to_templateという関数に渡します。渡される関数はviews関数と呼ばれ、リクエスト情報を元に実際の表示を担当する関数です。includeというのは引数の別のurls.pyを展開して、そのあとの処理を任せるようになっています。この辺りを全部説明すると長くなるので割愛しますが、ROOT_URLCONFに指定されたurls.pyはURLを振り分けて、実際に表示する関数(veiws関数)を呼び出すと理解しておいてください。(projects/complete_project/appsの下)と、様々なappが無いというエラーが発生します。話すより書いた方がいいと思ったので動画ではしゃべってませんがbasic_project_2直下にないし、adminのようにdjango自体のアプリでないアプリがなぜ使うことができるか?ということが重要です。"apps"))のようになっています。pinax/apps/local_appsと、そのプロジェクト直下のappsにPATHを通していて(あと、pinax/libs/external_libs直下のライブラリにもPATHを通しています)こうすることによって、複数のprojectで使いまわすappへのPATHを通すことを実現しているのです。fastcgiで動かす場合のヒントがあるので本番時でも、それらを使うことで運用ができます。これらはレンタルサーバーで活用するときにライブラリのインストールが通常のsite-packagesにできない場合など参考にするといいかもしれません。ここではphotosとfriends_appはcomplete_project/appsの下にあり、名前空間から外れているのでbasic_projects_2/appsへコピーをしています。TemplateDoesNotExistのエラーです。djangoはappの下にtemplatesというディレクトリがあれば、なにも設定しなくてもそこからtemplateファイルを探すのですがsettings.pyのTEMPLATE_DIRSに設定すればそちらを優先して探します。basic_projects_2/templates/friends_appでコピーしました。nameで指定されたURLを探し出すものです。http://localhost:8001/avatar/change/と置き換えます。なく、別のURLに変更したいときに該当するurls.py一箇所を変えればテンプレートの変更をする必要がないので便利です。今回のようにhttp://localhost::8001/avatar/changeをurls.pyに設定し忘れたときにエラーが発生するのも良いところです。include('avatar.urls')),を追加すれば大丈夫です。これで、profilesが一応complete_projectと同じような画面がでたと思います。次はmicrobloggingの導入の予定です。他のフレームワークや言語をやっている人がDjangoをちょっと触ってみたいという意図では今回のハンズオンの課題は難しすぎたかもしれないので、もっと簡単なDjangoの基本を一回間に入れようかと思います。Arcsinueblog。