# articles > templates > articles >detail.html
수정 요청자와 작성자를 비교해서, 서로 같을 때만
글을 update 할 수 있는 버튼이 나타나도록 하기
{% if request.user == article.user %}
<a href="{% url "articles:update" article.pk %}">UPDATE</a>
<form action="{% url "articles:delete" article.pk %}" method="POST">
{% csrf_token %}
<input type="submit" value="DELETE">
</form>
<hr>
{% endif %}
더보기
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Detail</h1>
<h2>{{ article.pk }} 번째 글</h2>
<hr>
<p>작성자: {{ article.user }}</p>
<p>제목: {{ article.title }}</p>
<p>내용: {{ article.content }}</p>
<p>작성일: {{ article.created_at }}</p>
<p>수정일: {{ article.updated_at }}</p>
<hr>
{% if request.user == article.user %}
<a href="{% url "articles:update" article.pk %}">UPDATE</a>
<form action="{% url "articles:delete" article.pk %}" method="POST">
{% csrf_token %}
<input type="submit" value="DELETE">
</form>
<hr>
{% endif %}
<h3>댓글 작성</h3>
<form action="{% url "articles:comments_create" article.pk %}" method="POST">
{% csrf_token %}
{{ comment_form }}
<input type="submit" value="댓글 작성">
</form>
<hr>
<h3>댓글 목록</h3>
<ul>
{% for comment in comments %}
<li>
{{ comment.user }} - {{ comment.content }}
{% if request.user == comment.user %}
<form action="{% url "articles:comments_delete" article.pk comment.pk %}" method="POST" style="display: inline;">
{% csrf_token %}
<input type="submit" value="삭제">
</form>
{% endif %}
</li>
{% endfor %}
</ul>
<hr>
<a href="{% url "articles:index" %}">[back]</a>
</body>
</html>
# articles > views.py
수정 요청자와 작성자를 비교하기
둘이 일치한다면, 글을 update 할 수 있도록 만들기
if request.user == article.user:
만약에 일치하지 않는다면, 메인페이지로 보내기
else:
return redirect('articles:index')
@login_required
def update(request, pk):
article = Article.objects.get(pk=pk)
if request.user == article.user:
if request.method == 'POST':
form = ArticleForm(request.POST, instance=article)
if form.is_valid():
form.save()
return redirect('articles:detail', article.pk)
else:
form = ArticleForm(instance=article)
else:
return redirect('articles:index')
context = {
'form': form,
'article': article,
}
return render(request, 'articles/update.html', context)
더보기
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from .models import Article, Comment
from .forms import ArticleForm, CommentForm
def index(request):
articles = Article.objects.all()
context = {
'articles': articles,
}
return render(request, 'articles/index.html', context)
def detail(request, pk):
article = Article.objects.get(pk=pk)
comments = article.comment_set.all()
comment_form = CommentForm()
context = {
'article': article,
'comments': comments,
'comment_form': comment_form,
}
return render(request, 'articles/detail.html', context)
@login_required
def create(request):
if request.method == 'POST':
form = ArticleForm(request.POST)
if form.is_valid():
article = form.save(commit=False)
article.user = request.user
article.save()
return redirect('articles:detail', article.pk)
else:
form = ArticleForm()
context = {
'form': form,
}
return render(request, 'articles/create.html', context)
@login_required
def delete(request, pk):
article = Article.objects.get(pk=pk)
article.delete()
return redirect('articles:index')
@login_required
def update(request, pk):
article = Article.objects.get(pk=pk)
if request.user == article.user:
if request.method == 'POST':
form = ArticleForm(request.POST, instance=article)
if form.is_valid():
form.save()
return redirect('articles:detail', article.pk)
else:
form = ArticleForm(instance=article)
else:
return redirect('articles:index')
context = {
'form': form,
'article': article,
}
return render(request, 'articles/update.html', context)
def comments_create(request, pk):
article = Article.objects.get(pk=pk)
comments = article.comment_set.all()
comment_form = CommentForm(request.POST)
if comment_form.is_valid():
comment = comment_form.save(commit=False)
comment.article = article
comment.user = request.user
comment.save()
return redirect('articles:detail', article.pk)
context = {
'comment_form': comment_form,
'article': article,
'comments': comments,
}
return render(request, 'articles/detail.html', context)
def comments_delete(request, article_pk, comment_pk):
comment = Comment.objects.get(pk=comment_pk)
comment.delete()
return redirect('articles:detail', article_pk)
'WEB > Django prac' 카테고리의 다른 글
[Django prac][DB N:1 ②] 9. 이 게시글의 작성자만 지울 수 있도록 처리해주기 (0) | 2024.04.05 |
---|---|
[Django prac][DB N:1 ②] 8. 수정 요청자와 작성자를 비교해서 일치한다면, 글을 update할 수 있도록 만들기 (0) | 2024.04.05 |
[Django prac][DB N:1 ②] 6. 댓글 작성자가 페이지에 잘 표시되는지 확인하기 (0) | 2024.04.04 |
[Django prac][DB N:1 ②] 5. 작성자 넣기 (0) | 2024.04.04 |
[Django prac][DB N:1 ②] 4. 작성자가 페이지에 표시되도록 (0) | 2024.04.04 |