[Django] 비 SPA 방식으로 장고 Forms/Views를 적극 활용한 인스타그램 St 만들기#7_instagram post_detail 뷰 구현

아직·2022년 7월 13일
0
post-thumbnail

1)

class Post(models.Model):
...
    def get_absolute_url(self):
        return reverse("instagram:post_detail", args=[self.pk])

views.py에 post_view 함수 혹은 DetailView의 인스턴스 함수를 정의해줄 때 pk/slug 인자를 사용한다. 그리고 해줘야할 작업은 get_absolute_url을 정의해주는 것이다. 그런데 해당 함수가 없어도 /post/pk로 접근하는데 에러가 발생하지 않았다.

args=[self.pk]가 아닌 kwargs={"pk":self.pk}를 대신 사용할 수 있다.

reverse 함수가 django.urls에 있는 점이 의미심장하다.

2)

{{ post.author.name }}

post_detail.html에 post를 던지는 views.py의 post_detail 함수는 get_object_or_404 함수를 통해서 Post 클래스를 참조한다.

Post 클래스의 author 인자는 현재 활성화된 유저 모델과 외래키로 연결돼 있는데 이것이 User 클래스라서 property 장식자로 연결된 name 함수를 인자처럼 사용할 수 있는 것처럼 보인다.

property 장식자의 쓰임새 중 큰 부분은 메소드를 필드처럼 사용할 수 있게 해준다는 데 있다.

3)

{% if user.avatar %}
	<img src="{{ user.avatar.url }}" />
{% else %}
	<image src="{% url "pydenticon_image" user.username %}" style="width: 24px; height: 24px;" />
{% endif %}

<img src="{{ user.avatar_url }}" style="width: 24px; height: 24px;" />
+
@property
    def avatar_url(self):
        if self.avatar:
            return self.avatar.url
        else:
            return resolve_url("pydenticon_image", self.username)

프로젝트의 layout.html 상에서만 구현했던 avatar가 있을 때/없을 때의 조건이, 다른 경로에서도 사용할 일이 많아져서, accounts 앱의 models.py에서 property 장식자 하에 구현해주고 이를 인자의 형태로 사용한다.

0개의 댓글