-
[Django] 태그 검색🔎기능 만들기프로그래밍/Django & Flask 2020. 11. 28. 16:31반응형
🔫완성작🔫
✨ models.py
# 게시글 class Post(models.Model): # .... tagging = models.ManyToManyField(Tag, related_name='tagged') # 태그 class Tag(models.Model): tag_content = models.CharField(max_length=30)
Tag 클래스 생성 후 게시글과 M:N 관계를 설정해준다.
✨ urls.py
# 해시태그 path('hashtag/', views.hashtag, name="hashtag"),
✨main.html (templates)
# 검색창에 키워드 입력하면 hashtag로 연결
<form method='post' action='{% url 'hashtag' %}'> {% csrf_token %} <input type="" name="search_button" value="검색" style="background-color: rgb(242, 242, 242)"> </form>
✨ views.py
# 게시글 생성 시 태그를 따로 저장해주기 위해 수정
def create(request): if request.method == "POST": form = PostForm(request.POST, request.FILES) if form.is_valid(): # 게시글 저장 user = MyUser.objects.get(id=request.user.id) post = form.save(commit=False) post.posting_writer = user post.save() # 태그처리 content = request.POST.get('posting_content') # 본문을 content에 저장 c_list = content.split(' ') # 공백으로 분리 for c in c_list: if '#' in c: # 만약 #이 붙어있으면 tag 객체를 이용하여 저장한다 tag = Tag() tag.tag_content = c tag.save() post_ = Post.objects.get(pk=post.pk) post_.tagging.add(tag) return redirect('/') else: return redirect('create') elif request.method == "GET": form = PostForm() return render(request, 'post/create.html', {'form':form})
# 해쉬태그 검색
#hash tag 검색 def hashtag(request): if request.method == 'POST': keyword = request.POST.get('search_button') # keyword를 입력받음 tag = Tag.objects.filter(tag_content=keyword) # 해당 키워드를 가진 tag 클래스 오픈 post= Post.objects.filter(tagging__in = tag).order_by('-posting_date') # 해당 태그를 가진 post 저장 #if post: # post_ = post[0] #else: # post_ = None return render(request, 'post/search_result.html', {'post':post, 'keyword':keyword}) elif request.method == 'GET': return redirect('/')
✨ search_result.html
# 게시글 출력
{% block content %} <div class="content"> <div id="hashtag_posting"> {% if post_ %} <img id="photo" src="{{ post_.posting_photo.url }}"> {% else %} <img id="photo""> {% endif %} <div id="hashtag">{{ keyword }}</div> <div id="hashtag_count">게시글 {{ post.count }}개</div> </div> <br> <br> <br> <div id="title">{{ keyword }}과 관련된 게시물</div> <div class="image_box"> {% for post in post.all %} <img id="image_box" src="{{ post.posting_photo.url }}"> {% endfor %} </div> </div> {% endblock %}
반응형'프로그래밍 > Django & Flask' 카테고리의 다른 글
[Django] ImportError: cannot import name 'Class' from 'app.models' (클래스 간 circular dependency) (0) 2020.11.30 [Django] 🤔 a 태그를 이용한 검색기능 구현중..... (0) 2020.11.30 [Django] objects.filter에 다중값 넣기 (0) 2020.11.27 [Django & Ajax] jquery 사용시 처음것만 실행되는 문제 (0) 2020.11.25 [Django] 참조 & 역참조 (0) 2020.11.25