코딩공부/홈페이지 만들기

Django로 홈페이지 만들기 - #10 multi-hashtag

integerJI 2020. 5. 10. 19:46


참고 사이트

보고 배운 곳

https://wayhome25.github.io/django/2017/06/22/custom-template-filter/

 

오늘 사용한 App

myApp

 

사용한 명령어

python manage.py makemigrations

python manage.py migrate

 

포인트

지금까지 배운 걸 활용하여

Tag2를 새로 생성하였다.

이곳은 Tag에 생성된 태그와 똑같이 저장된다.

그리고 Tag를 통해 search에 들어가면

if tag일 때 Tag2를 검색하는 multi-search input을 보여준다.

multi-search를 통해 검색을 하면 Tag에서 검색한 내용에 +로 Tag2의 내용을 검색해

해시태그 이중 검색을 완성해 보았다.

 

완성된 git ( 2020.06.18 키 노출로 인한 git 비공개 )

https://github.com/integerJI/int_1

 

aws key 노출되다.

https://integer-ji.tistory.com/200

 

aws key 생성시 주의 할점

https://integer-ji.tistory.com/208

 

▶▶ 완성 했다면 실제 서버에 배포하기 ◀◀

https://integer-ji.tistory.com/11

https://integer-ji.tistory.com/12

https://integer-ji.tistory.com/13


사용한 디렉터리 계층구조 및 파일


myApp

# myProject/myApp/models.py

class Post(models.Model):

# ... 생략

    tag_set_2 = models.ManyToManyField('Tag_2', blank=True)
    
    def tag_save_2(self):
        tags_2 = re.findall(r'#(\w+)\b', self.main_text)

        if not tags_2:
            return

        for t_2 in tags_2:
            tag_2, tag_created_2 = Tag_2.objects.get_or_create(tag_name_2=t_2)
            self.tag_set_2.add(tag_2)
            
            
class Tag_2(models.Model):
    tag_name_2 = models.CharField(max_length=140, unique=True)

    def __str__(self):
        return self.tag_name_2
# myProject/myApp/admin.py

from django.contrib import admin
from .models import Post, Comment, Tag, Tag_2

# Register your models here.
admin.site.register(Post)
admin.site.register(Comment)
admin.site.register(Tag)
admin.site.register(Tag_2)
<!--myApp/templates/search.html-->

# ... 생략

<aside class="col-md-3 blog-sidebar">
    <div class="card mb-3 bg-light rounded" style="max-width: 540px;" bg-light rounded>
        <div class="row no-gutters">
            <a></a>
            <div class="col-md-5 d-flex align-items-center d-flex justify-content-center">
                <img src="{{ pic_url }}" alt="..." class="rounded-circle" width="60" height="60">
            </div>
            <div class="col-md-6">
                <div class="card-body">
                    <a><span id="user_name">{{user.username}}</span></a>
                    <br>
                    <a href="{% url 'mypage' %}">My Profile</a>
                    <br>
                    <a href="{% url 'post' %}">New Post</a>
                </div>
            </div>
        </div>
    </div>
    
    # ... new
    
    {% if tag %}
    <form action="" method="post">
        {% csrf_token %}
        <input class="form-control" type="search" placeholder="Search" aria-label="Search" name="y">
    </form>
    {% endif %}
    {% if messages %}
    <div class="alert alert-warning alert-dismissible fade show" role="alert">
        {% for message in messages %}
        <strong>{{ message.message }}</strong>
        {% endfor %}
        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
            <span aria-hidden="true">&times;</span>
        </button>
    </div>
    {% endif %}
    
    <div class="p-3">
        <h4 class="font-italic">Producer</h4>
        <ol class="list-unstyled">
            <li><a href="https://github.com/integerJI">GitHub</a></li>
            <li><a href="https://www.instagram.com/integer_ji/">Instagram</a></li>
        </ol>
        <footer class="my-2 pt-2 text-muted text-center text-small">
            <p class="mb-1">&copy; 2019-2020 Integer Ji</p>
        </footer>
    </div>
</aside>


# ... 생략

마무리


후기 : https://integer-ji.tistory.com/175