Django 개념
장고 해시태그 기능 구현하기 #해시태그
MC류짱
2022. 10. 13. 17:40
영화정보 게시판 app_name='movies'
movies/models.py
from django.db import models
from django.conf import settings
class Hashtag(models.Model):
content = models.TextField(unique=True)
def __str__(self):
return self.content
class Movie(models.Model):
hashtags = models.ManyToManyField(Hashtag, blank=True)
- Hashtag라는 새로운 모델 추가 필드는 content를 가지고, unique는 True로 설정
- 기존 Movie테이블에 ManyToManyField로 Hashtag테이블과 연결 시켜준다.
movies/urls.py
from django.urls import path
from . import views
app_name = "movies"
urlpatterns = [
.....
path('<int:hash_pk>/hashtag/', views.hashtag, name='hashtag'),
]
movies/views.py
@login_required
def hashtag(request, hash_pk):
hashtag = get_object_or_404(Hashtag, pk=hash_pk)
movies = hashtag.movie_set.order_by('-pk')
context = {
'hashtag': hashtag,
'movies': movies,
}
return render(request, 'movies/hashtag.html', context)
movies/templates/movies/hashtag.html
{% extends 'base.html' %}
{% block content %}
<div>
<h2>{{ hashtag.content }}</h2>
<p>{{ movies|length }}개의 게시글</p>
</div>
<hr>
<div>
<h3>{{ hashtag.content }} (을)를 태그한 글</h3>
<br>
{% for movie in movies %}
<h5>영화 {{ movie.title }}</h5>
<p>{{ movie.comment_set.all|length }}개의 댓글</p>
<a href="{% url 'movies:detail' movie.pk %}" class="btn btn-primary btn-sm">상세글로 바로 가기</a>
<hr>
{% endfor %}
</div>
{% endblock %}
홈페이지(detiail.html)
홈페이지(hashtag.html)