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)