view, model, url

TeetyWoo·2021년 10월 16일
0

Django

목록 보기
6/11

장고 MTV 모델을 이해하고 게시글 목록을 보는 페이지를 작성했다
html에서 사용자의 request(urls.py)->서버에서 응답 및 데이터처리(views.py)->다시 사용자에게 보여주기(html)

from django.contrib import admin
from django.urls import path
from BANGAPP import views
from BANGAPP.views import LoginView,LikeArticleView,HateListView

path('list_themeRev/', views.list_themeRev, name="list_themeRev"),
path('detail/themeRev/<int:themeRev_pk>', views.detail_themeRev, name="detail_themeRev"),
path('liketest/<int:pk>', LikeArticleView.as_view(), name="article_like"),
path('like/', views.like, name="like"),

path의 첫번째 인자는 사용자의 request다.
사용자가 127.0.0.1:8000/list_themeRev를 입력 한다면~

두번째 인자는 받은 request로 어떤 행동을 취할지이다.
views.py의 list_themeRev라는 view를 실행시킨다

세번째 이름은 사용자의 request에 대한 별명 같은 것인데, 주로 html에서 자주 불린다.
{% url list_themeRev %}로 views.list_themeRev를 작동시키는 등

detail/themeRev/<int:themeRev_pk>는
detail/themeRev/ 뒤에 어떤 int형 숫자가 들어오는데, 이걸 themeRev_pk라는 변수에 저장할 것이라는 뜻이다.
이걸로 몇번째 디테일 페이지를 열어 줄 것인지가 결정된다.
이렇게 받은 themeRev_pk는 view에서 다음과 같이 사용된다.

def detail_themeRev(request, themeRev_pk):
    themeRev = ThemeRev.objects.get(pk=themeRev_pk)
    if request.method == "POST":
        return redirect('detail_themeRev', themeRev_pk)

    return render(request, 'detail_themeRev.html', {'themeRev': themeRev})

html에서는 이렇게 사용되는데,

<a href="{% url 'detail_themeRev' review.pk %}">

여기서의 review는 view에서 가져온 수많은 themeRev들 중 하나를 의미하고, 그 themeRev의 pk에 해당하는 값을 themeRev_pk로 받겠다는 뜻이다. 그러니까
detail/themeRev/review.pk에 해당하는 url이 열린다.
review.pk는 detail_themeRev view의 두번째 인자 themeRev_pk에 들어간다.

목록 하나하나를 작성하는 view는 다음과 같이 쓸 수 있다.


def list_themeRev(request):
    themes = Theme.objects.all()
    reviews = ThemeRev.objects.all()
    shops = Shop.objects.all()
    
    content = {
      'themes':themes, 'reviews':reviews, 'shops':shops,
    }
    return render(request,'list_themeRev.html', content)

테마 하나하나, 가게에 대한 정보 하나하나, 테마 리뷰 하나하나에 대한 정보들이 html에 들어가야 하므로 모델 전체를 키값과 value값이 있는 content로 묶어서 render한다.

list_theme.py

	    {% for review in reviews %}
            {% for theme in themes%}
            {% if review.theme_ID_id == theme.themeID %}
            {% for shop in shops %}
            {% if shop.shopID == theme.ShopID_id %}
            <div class="info">
              <img src="{% get_static_prefix %}{{review.themeRevImage}}"/>
              <div>
                <div>{{shop.shopName}}</div>
                <div>{{shop.Location}}</div>
                <div>{{review.themeRevRating}}</div>
              </div>
            </div>
            {% endif %}
            {% endfor %}
            {% endif %}
            {% endfor %}

review.theme_ID_id는, python3 manage.py shell에서

from appname.models import ThemeRev
ThemeRev.objects.all().values()

명령어로 알아낸 값이다.
각각의 테마의 pk값이 리뷰의 theme_ID_id값과 같아야 그 테마에 대해 작성한 리뷰를 구할 수 있다.
또한 그 테마가 속해있는 가게 정보를 얻기 위해서는 가게의 pk값이 테마의 ShopID_id값과 같아야 한다.

0개의 댓글

관련 채용 정보