はじめに
いつも心は虹色に! nikkieです。
3/30にDjango Girls Tutorialを使った勉強会のコーチをしてきました。
参加者の方の質問に答える中で学んだことをレポートとしてお送りします。
勉強会の概要
PythonでWebアプリを作ろう [女性対象/男女コーチ◎] 2019.3 - connpass
Django Girls のチュートリアルを使って、一緒にWebアプリケーションをつくります。
コーチ・メンターが、躓いたところや、分からないところはサポートします。レベル別にチームを分けて勉強するので、 はじめてプログラミングに挑戦する方も、焦ることなくイチから学ぶことができます。
Django Girlsにはチュートリアルの翻訳やワークショップでのコーチで関わっています。
予定が合ったので、数カ月ぶりにコーチ参加しました。
解決した質問
もしよろしければ以下の観点でお読みください。
- 「もしこういうエラーが出たらここを見ればいいのか」とFAQ的に読む
- Djangoをご存知の方はどこが原因か考える(全3題のクイズ形式)
1. 作ったblog/urls.pyについてModuleNotFoundError
この中で発生:Django URL · Django Girls Tutorial
エラーメッセージはNo module named 'blog.urls'
(mysite/urls.pyのpath('', include('blog.urls')),
で発生)
チュートリアルに沿って作ったblog/urls.pyが見つからない?🤔
作成したblog/urls.py
from django.urls import path, include from django.contrib import admin urlpatterns = [ path('admin/', admin.site.urls), path('', include('blog.urls')), ]
どうやらrunserverした状態でblog/urls.pyを作成(新規追加)しても、反映されないようです(runserverは落ちたまま)。
Ctrl+Cでrunserverを終了し、再度runserverすると解決しました。
(runserverでは既存のファイルの変更は反映されますが、新規追加ファイルが反映されないことがあると理解しています)
2. migrateしたらModuleNotFoundError
この中で発生:Djangoモデル · Django Girls Tutorial
エラーメッセージを見ると、staticfilesblog
がインポートできないとのこと
staticfilesblog
?🤔
原因箇所(mysite/settings.py)
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles' 'blog' ]
原因:INSTALLED_APPSの'django.contrib.staticfiles'
の後ろにカンマがない
そのため、後続のblogという文字列と連結して扱われていた。
文字列の要素からなるリストでカンマを忘れると、連結した文字列として扱われます(bcに注目ください)。
>>> ['a', ... 'b' ... 'c'] ['a', 'bc']
3. published_dateを更新しないpublishメソッド
この中で発生:Django ORM(クエリセット) · Django Girls Tutorial
前提:published_dateに値を持つ記事がない状態
>>> post = Post.objects.get(title="Sample title") >>> post.publish() # published_dateを設定しているはず >>> Post.objects.filter(published_date__lte=timezone.now()) <QuerySet []> # 現在時刻以前のpublished_dateを持つ記事がない→値が設定できていない?
原因箇所(blog/models.py)
def publish(self): self.published_date = timezone.now() self.save
原因:self.save
の後ろにカッコ(()
)がない
そのため、saveメソッドが実行されていない
Anacondaでの環境構築
AnacondaでPythonをインストールした方が、Django Girls Tutorialをやる場合、conda install
に読み替えてDjangoをインストールすることをオススメ1します。
参考:Djangoハンズオンの環境構築で書いた記事:環境を分離してDjangoの開発環境を作る(Python3系・Django2.1系) - Qiita
Anacondaの方は、 Djangoのインストール · Django Girls Tutorial にあるrequirements.txtやpip install
は無視してください。
Django Girls Tutorialの手順
AnacondaでPythonを入れていて、venvモジュールで仮想環境を作るとエラーが発生することが多い印象です。
この日、私が知る限りで2件ありました。(一例:sqlite3用のモジュールが読み込めないというエラーが出た)
エラーの内容が同一ではないので、Anacondaとvenvモジュールが原因かは断定できない2のですが、conda installでDjangoをインストールして進めていただいたところ、エラーは解消したようです。
「データ分析からPythonを始めてDjangoへ」という方が増えている印象なので、Django Girls TutorialにAnaconda向けの環境構築方法は必要そうですね。(言い出しっぺの法則で提案してみようかな。まずはIssue探しから)
Anacondaに関してこの日学んだこと
- Anaconda Promptではbaseからdeactivateせずに、他の環境をactivateできる(環境から環境に移れるということ。パスが通っていなくてdeactivate後、condaコマンドやactivateが使えなかった)
- Windowsでcondaコマンドのパスを通す際の参考 https://appuals.com/fix-conda-is-not-recognized-as-an-internal-or-external-command-operable-program-or-batch-file/ (3番め)
関連情報
- Webアプリに限らずPythonを知るならPyladies
- 直近のイベントは4/13:PyLadies Tokyo Meetup #40 Python入学式 - connpass
- 5月にはDjangoCongress JP 2019
私が関わっているものも宣伝させていただきました。
- 4/10は平成最後のみんなのPython勉強会:みんなのPython勉強会#44 - connpass
- 4/2 Django関連のもくもく会:beststagemoku #04 DjangoからVue(Nuxt)もくもく会 - connpass
- 主催の方から「知名度が課題」と伺ったので、「こんなのもありますよ」と情報共有
感想
やはり人に教えることは自分の学びにもなりますね。
Django Girlsでお世話になっているkaizumakiさんから、刺激的なIssueを共有していただきました。
(今後ハンズオンを開く機会があったら試してみたいです)
終わったあとの懇親会も盛り上がり、楽しいひと時でした。
(コーチ参加者同士で「どう教えるか」というトピックになると、すごく盛り上がりますね!)
参加者、コーチ、運営の皆さま、ありがとうございました。
この記事のアイキャッチは以下から利用しました。魅力的な写真素材をありがとうございます:
Photo by Startup Stock Photos from Pexels