前回の続き。
コメント編を書いていきます。
ユーザが右上のボタンで新規に登録すると、下のようにその情報がカードみたいな感じで作られます。
この時考えるべきことは
1.コメントを押した時にどこのURLに飛ばせるか
2.そのURLにアクセスした時の処理
この二つを考える必要があります。
1.これはhtmlにかく必要があります。
<a class="btn btn-outline-dark " href="{% url 'new_topic' item.pk %}">コメント</a> <a class="btn btn-outline-dark " href="{% url 'topics' item.pk %}">一覧</a> <a class="btn btn-outline-dark " href="{% url 'update' item.pk %}">編集</a> <a class="btn btn-outline-dark " href="{% url 'delete' item.pk %}">削除</a>
このようにコメントを押したらhref要素を上のように指定します。
するとurl.pyから'new_topic' item.pkに一致するものを探してきてくれます。
/boards/urls.pyに次のように書いてあります
path('<int:pk>/', views.reply_topic, name='new_topic'),
これで/boards/2/とかのURLにアクセスした時にview.reply_topicが実行されます。
2.アクセスした時の処理はview.pyの中にある、reply_topicを書く必要があります。
def reply_topic(request, pk): try: topic = Topic.objects.get(pk=pk) except Topic.DoesNotExist: form = PostForm() board = Board.objects.get(pk=1) return render(request, 'first.html', {'board': board}) if request.method == 'POST': message = request.POST['message'] user = get_user_model().objects.first() # TODO: get the currently logged in user form = PostForm(request.POST) if form.is_valid(): topics = Topic.objects.get(pk=pk) post = form.save(commit=False) post.topic = topics post.created_by = request.user post.save() return redirect('topics', pk=pk) return render(request, 'reply_topic.html', {'topic': topic,'form': form} )
こんな感じです
処理としては、コメントボタンを押して、初めてのコメントなら、新しくコメントできるページに飛ばし
もし他にコメントがされているなら普通にコメントができるページに飛ばす
みたいな処理になっています。
try: topic = Topic.objects.get(pk=pk) except Topic.DoesNotExist: form = PostForm() board = Board.objects.get(pk=1) return render(request, 'first.html', {'board': board}) ```