##■質問
以下、app名/templates/diary_list.htmlというテンプレートの{% for diary in diary_list %}という記述の、diary_listという変数にどんな値が入っているのか確認する方法(=デバッグ方法)やヒントを教えていただけますでしょうか。
正しいデバッグ方法も知らない素人ですが、説明不足な点などは適宜追記して参りますので、どうぞよろしくお願い申し上げます。
template
1<!-- diary/templates/diary_list.html--> 2 3{% for diary in diary_list %} 4 <div class="post-preview"> 5 <a href="{% url 'diary:diary_detail' diary.pk %}"> 6 <h2 class="post-title"> 7 {{ diary.title }} 8 </h2> 9 <h3 class="post-subtitle"> 10 {{ diary.content|truncatechars:20 }} 11 </h3> 12 </a> 13 <p class="post-meta">{{ diary.created_at }}</p> 14 </div> 15 <hr> 16 {% empty %} 17 <p>日記がありません</p> 18{% endfor %}
##■やってみたこと
試しにmanage.py runserverでDjangoを起動中にpython manage.py shellコマンドでprint(diary_list)してみましたが未定義エラーが出ます。
pythonshell
1>>> print(diary_list) 2Traceback (most recent call last): 3 File "<console>", line 1, in <module> 4NameError: name 'diary_list' is not defined
#####きっかけ
以下の構成で、なぜviews.pyでcontextも指定されていないのにtemplateのdiary_list変数でDiaryモデルのリストオブジェクトが取得できるのか、わかりませんでしたので、まずはdiary_list変数に格納されている値をprintでシンプルに表示したいと考えました。
urls
1# diary/urls.py 2 3(略) 4 5app_name = 'diary' 6urlpatterns = [ 7(略) 8 path('diary-list/', views.DiaryListView.as_view(), name="diary_list"), 9(略) 10]
views
1# diary/views.py 2 3(略) 4class DiaryListView(LoginRequiredMixin, generic.ListView): 5 model = Diary 6 template_name = 'diary_list.html' 7(略)
models
1# diary/models.py 2 3class Diary(models.Model): 4 user = models.ForeignKey(CustomUser, verbose_name='ユーザー', on_delete=models.PROTECT) 5 title = models.CharField(verbose_name='タイトル', max_length=40) 6 content = models.TextField(verbose_name='本文', blank=True, null=True) 7 photo1 = models.ImageField(verbose_name='写真1', blank=True, null=True) 8 photo2 = models.ImageField(verbose_name='写真2', blank=True, null=True) 9 photo3 = models.ImageField(verbose_name='写真3', blank=True, null=True) 10 created_at = models.DateTimeField(verbose_name='作成日時', auto_now_add=True) 11 updated_at = models.DateTimeField(verbose_name='更新日時', auto_now=True) 12 13 class Meta: 14 verbose_name_plural = 'Diary' 15 16 def __str__(self): 17 return self.title
#####参考: 現状での私の認識
- urls.pyでdiary_listというname属性が定義され、DiaryListViewというビューと、diary-list/というURLが、そのname属性に紐付けられている
- print(diary_list)をエラーなく実行できれば、おそらくdiary_listに格納されたリストオブジェクトが返ってくると想像
- diary_list変数でDiaryモデルを参照できる理由がよくわからない(DiaryListViewの中で、Diaryモデルがmodel変数に設定されて、間接的にdiary_list変数 - DiaryListView - Diaryテーブルという構造で結びついているから?)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/29 01:41
2020/09/29 01:44