AI 웹 개발 과정/파이썬 장고 실무 기초

09. 5주차 이론 - django taggit module

만 기 2022. 6. 3. 11:27

 

게시글 쓰기 함수 수정

 

    elif request.method == 'POST':
        user = request.user
        content = request.POST.get('my-content','')

        if content == '':
            all_tweet = TweetModel.objects.all().order_by('-created_at')
            return render(request, 'tweet/home.html', {'error':'내용을 넣어주세요', 'tweet':all_tweet})
        else:
            my_tweet = TweetModel.objects.create(author=user, content=content)
            # my_tweet = TweetModel()
            # my_tweet.author = user
            # my_tweet.content = request.POST.get('my-content','')
            my_tweet.save()

        return redirect('/tweet')
  1.  게시글 빈칸일때 딕셔너리로 변수에 값 담아서 return한다.
  2. my_tweet = TweetModel.objects.create(author=user, content=content) 
    • .create 사용하여 한줄로 작성 할 수 있다.

 

 

django - taggit 모듈 사용하기

 

1. 설치하기

pip install django-taggit
pip install django-taggit-templatetags2

또는 파이참 setting -> python interpreter 에서 django-taggit 과 django-taggit-templatetags2 검색하여 설치 가능하다.

 

 

2. mySpartaSns 의 settings.py 파일의 INSTALLED_APPS 에 추가

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'tweet',
    'user',
    'restaurant',
    'taggit.apps.TaggitAppConfig',
    'taggit_templatetags2',
]

TAGGIT_CASE_INSENSITIVE = True
TAGGIT_LIMIT = 50

TAGGIT_CASE_INSENSITIVE TAGGIT_LIMIT 는 태그 모듈에 필요한 정보

 

 

3. tweet앱의 models.py 에 임포트 및 모델 수정

# tweet/models.py
from taggit.managers import TaggableManager

class TweetModel(models.Model):
    class Meta:
        db_table = "tweet"

    author = models.ForeignKey(UserModel, on_delete=models.CASCADE)
    content = models.CharField(max_length=256)
    tags = TaggableManager(blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

 

 

4. migration 실행

python manage.py makemigrations
python manage.py migrate

 

 

5. django 공식문서 코드 사용

 

- tweet/view.py 

from django.views.generic import ListView, TemplateView

 

# django taggit 사용에 필요한 코드
class TagCloudTV(TemplateView):
    template_name = 'taggit/tag_cloud_view.html'


class TaggedObjectLV(ListView):
    template_name = 'taggit/tag_with_post.html'
    model = TweetModel

    def get_queryset(self):
        return TweetModel.objects.filter(tags__name=self.kwargs.get('tag'))

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['tagname'] = self.kwargs['tag']
        return context

 

 

6. tweet.py 의 게시글쓰기에 태그 추가 및 html 수정

 elif request.method == 'POST':
        user = request.user
        content = request.POST.get('my-content','')
        tags = request.POST.get('tag','').split(',')

        if content == '':
            all_tweet = TweetModel.objects.all().order_by('-created_at')
            return render(request, 'tweet/home.html', {'error':'내용을 넣어주세요', 'tweet':all_tweet})
        else:
            my_tweet = TweetModel.objects.create(author=user, content=content)
            # my_tweet = TweetModel()
            # my_tweet.author = user
            # my_tweet.content = request.POST.get('my-content','')

            for tag in tags:
                tag = tag.strip()   # 공백없애준다
                if tag != '':
                    my_tweet.tags.add(tag)

            my_tweet.save()

        return redirect('/tweet')