장고 게시글 태그만들기
1 개요편집
게시글에 붙는 태그 만들기.
2 게시글에 태그 달기편집
2.1 model.py 수정편집
과정 | 설명 | 코드 |
---|---|---|
태그모델 생성 | 태그모델을 만든다.
속성은 필요에 따라. |
class Tag(models.Model):
name = models.CharField(max_length=32)
def __str__(self):
return self.name
|
게시글모델 변형 | 게시글 모델에 태그속성을 추가한다. | class Posting(models.Model):
...
tag = models.ManyToManyField('Tag', null=True, blank=True) # 태그 모델과 연결.
...
|
admin.py 수정 | 관리자창에서 볼 수 있게 수정해주자. | class TagAdmin(admin.ModelAdmin):
list_display = ('name',)
admin.site.register(Tag, TagAdmin)
|
DB반영 | app에 대하여 DB에 반영한다. | python manage.py makemigrations app
python manage.py migrate app |
2.2 form.py 수정편집
취향에 따라 다르겠지만, 나는 form에 추가하지 않고 진행하겠다. post로 들어온 데이터값을 그대로 사용하고자 한다.
2.3 view.py 수정편집
과정 | 설명 | 코드 |
---|---|---|
태그생성함수 짜기 | request와 posting을 받아 태그를 생성하는 함수를 짠다. | def tag_adding(request, posting):
tags = request.POST.get('tag').split(',')
for tag in tags:
if not tag:
continue
else:
tag = tag.strip() # 문자열 양쪽에 빈칸이 있을 때 이를 제거한다.
tag_, created = Tag.objects.get_or_create(name=tag) # created엔 새로 만들어졌는지 여부가 True로 나오고, tag_엔 그 태그가 담긴다.
posting.tag.add(tag_)
|
기존 함수 변형 | 게시글을 만들고 수정하는 뷰를 변형한다. | if form.is_valid(): #문제가 없으면 다음으로 진행.
...
posting.save()
tag_adding(request, posting) # 태그 추가 함수.
|
2.4 template 수정편집
과정 | 설명 | 코드 |
---|---|---|
게시글 생성 탬플릿 | 게시글 생성, 수정 시 태그를 입력하게 한다. | <label>태그 추가</label>
<input type="text" class="form-control" name="tag" id="tag" placeholder="구분은 ','로 합니다.">
{% for tag in posting.tag.all %}
<span>
<a href="">
#{{ tag.name }}</a>
{% endfor %}
|
게시글 탬플릿 | 게시글에서 태그를 표시한다. | <!---태그 추가 부분-->
<labe for = "tags">태그</labe>
{% for tag in posting.tag.all %}
<span>
<a href="{% url 'scientific_humor:tag_info' tag.name %}">
#{{ tag.name }}</a>
{% endfor %}
|