이전글 : [파이썬] Django - 기초 실습 3) Tweet (게시글)
게시글/댓글 조회
1. tweet/views.py에서 detail_tweet 함수 작성
@login_required
def detail_tweet(request, id):
if request.method == 'GET':
user = request.user.is_authenticated # is_authenticated : 로그인 되어 있는지 검사
if user:
target_tweet = TweetModel.objects.get(id=id)
comment = TweetComment.objects.filter(tweet_id=id)
return render(request, 'tweet/tweet_detail.html', {'tweet': target_tweet, 'comment': comment})
else:
return redirect('/sign-in') # 로그인 하지 않은 사용자라면 로그인 페이지로 이동
2. tweet/urls.py에서 path 추가
path('tweet/<int:id>', views.detail_tweet, name='detail-tweet'),
3. templates/tweet/tweet_detail.html 작성
댓글 작성
1. tweet/views.py에서 write_comment 함수 작성
@login_required
def write_comment(request, id):
if request.method == 'POST':
user = request.user
target_tweet = TweetModel.objects.get(id=id)
my_comment = TweetComment()
my_comment.author = user
my_comment.tweet = target_tweet
my_comment.comment = request.POST.get('comment', '')
my_comment.save()
return redirect('/tweet/' + str(id))
2. tweet/urls.py에서 path 추가
path('tweet/comment/<int:id>', views.write_comment, name='write-comment'),
3. templates/tweet/tweet_detail.html 작성
댓글 삭제
1. tweet/views.py에서 delete_comment 함수 작성
@login_required
def delete_comment(request, id):
my_comment = TweetComment.objects.get(id=id)
my_comment.delete()
return redirect('/tweet/' + str(my_comment.tweet_id))
2. tweet/urls.py에서 path 추가
path('tweet/comment/delete/<int:id>', views.delete_comment, name='delete-comment'),
3. templates/tweet/tweet_detail.html 조건문 사용 댓글 삭제 버튼 작성
tweet_detail.html
{% extends 'base.html' %}
{% block title %}
게시글 자세히보기
{% endblock %}
{% block content %}
<div class="container timeline-container">
<div class="row">
<!-- 왼쪽 컬럼 -->
<div class="col-md-3">
<div class="card">
<div class="card-body">
<h5 class="card-title">{{ user.username }}</h5>
<p class="card-text"> {{ user.bio }}</p>
</div>
</div>
</div>
<!-- 오른 쪽 컬럼-->
<div class="col-md-7">
<div class="row">
<div class="col-md-12 mb-2">
<div class="card">
<div class="card-body">
{% if tweet.author == user %}
<div style="text-align: right">
<a href="/tweet/delete/{{ tweet.id }}">
<span class="badge rounded-pill bg-danger">삭제</span>
</a>
</div>
{% endif %}
<div class="media">
<div class="media-bod">
<h5 class="mt-0">{{ tweet.content }}</h5>
</div>
<div style="text-align: right">
<span style="font-size: small">{{ tweet.author.username }}-{{ tweet.created_at|timesince }} 전</span>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 글 작성 하는 곳 -->
<form class="input-group mb-3" action="/tweet/comment/{{ tweet.id }}" method="post">
{% csrf_token %}
<input type="text" class="form-control" id='comment' name='comment' placeholder="댓글을 작성 해 주세요"/>
<button class="btn btn-outline-secondary" type="submit">작성</button>
</form>
<hr>
<!-- 반복문이 들어 갈 곳 -->
{% for cm in comment %}
<div class="row">
<div class="col-md-12">
<div class="media">
<div class="media-body">
<h5 class="mt-0"> {{ cm.comment }} </h5>
<span> {{ cm.author }} </span>
<span> - {{ cm.created_at | timesince }} 전</span>
</div>
{% if cm.author == user %}
<div style="float: right">
<a href="/tweet/comment/delete/{{ cm.id }}">
<span class="badge bg-danger">삭제</span>
</a>
</div>
{% endif %}
</div>
</div>
</div>
<hr>
{% endfor %}
<!-- 반복문이 끝난 곳 -->
</div>
</div>
</div>
{% endblock %}
'Backend > Django' 카테고리의 다른 글
[파이썬] Django - SNS 기초 실습 6) 회원가입/로그인/친구 서비스 디테일 (0) | 2022.05.30 |
---|---|
[파이썬] Django - SNS 기초 실습 5) Follow (ManyToMany) (0) | 2022.05.30 |
[파이썬] Django - SNS 기초 실습 3) Tweet (게시글) (0) | 2022.05.27 |
[파이썬] Django - SNS 기초 실습 2) Tweet (홈 화면) (0) | 2022.05.27 |
[파이썬] Django - SNS 기초 실습 1) User (0) | 2022.05.27 |