エンジニア

なんくるないさ

「このブログはアフィリエイト広告を利用しています」

Djangoで作った掲示板ウェブアプリ(コメント編)

 

jump1268.hatenablog.com

 

前回の続き。

 

コメント編を書いていきます。

ユーザが右上のボタンで新規に登録すると、下のようにその情報がカードみたいな感じで作られます。

f:id:jump1268:20190427122242p:plain

 

 

この時考えるべきことは
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})
 ```