django 002 | wordcount app

12232 단어 djangodjango

순서 리마인드

실습

이전 실습으로부터 이어서 진행

  1. 가상환경 켜기
source myvenv/Scripts/activate
  1. wordcount app 추가
python manage.py startapp wordcount
  1. app 추가하면 settings 의 installed app 에도 추가
'wordcount.apps.WordcountConfig',
  1. about.html 추가 => views.py 에 about 함수 만들어주고 => urls.py path 에 views를 이어주는 경로 만들어줌
  1. home.html에서 about.html, result.html로 넘어갈 수 있는 링크 연결하기
    (src 방식)
        <a href="{% url 'about' %}">about으로 이동</a>
        <a href="{% url 'result' %}">result로 이동</a>

(+) {% url '링크name'%} => url에서 설정했던 이름으로 해당 페이지로 넘어가는 링크 만등러줌

(+) {{변수}}
view 파일에서 지정한 변수를 html에서 소환

(+) {% 파이썬 문법 %}
html에서 파이썬 문법 사용

  1. home.html에서 글자 입력 받을 form을 만들기
        <form action="{% url result %}">
        <textarea name = "fulltext" cols="40" rows="10"></textarea>
            <input type="submit" value="계산하기">
        </form>

=> home.html에서 textarea를 생성해 긴 문장을 입력받은 후 밑에 "계산하기"라고 적혀있는 제출 버튼이 있는데 이를 누르면 폼에 지정된 액션에 의해 result.html로 창이 이동하게 된다. 이때 textarea의 이름은 fulltext라고 지정해주었다.

  1. home.html이 result.html에게 넘겨주어야 할 변수(fulltext)가 추가되었으므로 views.py 수정해주러 가기!
(+) remind :

def result(request):
    userName =  request.GET['name'] 
    # 변수이름 = requser.GET['가져올친구이름']
    # 위의 코드는 home에서 form에 입력했던 name이라는 이름의 친구를 데려온다
    return render(request, "result.html",{"userName" : userName}) #키 : 값
    # result.html이라는 창에 userName 으로 받아온 name 친구를 "userName"이라는 친구로 다시 또 설정해서 데려온다 => 그렇게 되면 result 창에서는 views에서 정해준 친구의 별명을 {{views에서의 최종 별명}} 이렇게 받아와서 result에서 드러내준다
    
    result.html 창
    =>     <h1>반갑습니다 {{userName}}~</h1>
    
def result(request):
    text=request.GET['fulltext'] 
    return render(request, "result.html",{ "total" : text})

=> 이렇게 하면 home.html에서 textarea에 글을 쓰면 result.html이 total이라는 변수로 전달된 text(본래는 home.html의 'fulltext')가 그대로 result.html에 고스란히 나온다

  1. 여기서 우리는 전달해줄 text뿐만 아니라 단어의 수를 세서 result.html에 띄워주고 싶은 것이므로 이를 위해 home,html에서 전달받은 fulltext를 추가적으로 손봐줘야 한다
def result(request):
    text=request.GET['fulltext'] #home에서 fulltext라는 name의 친구도 가져온다
    words=text.split() #위에서 받아온 fulltext(text)를 쪼개준다
    
    word_dic={} #이 친구를 추가 처음엔 빈 사전으로 정의
    for x in words:
        if x in word_dic :
            word_dic[x]+=1
        else :
            word_dic[x]=1
    
    return render(request, "result.html",{ "total" : text, 'dic':word_dic.items()})
        #키(result에 가져다 줄 최종 별명) : 값(위의 GET에서 받아온 별명)로 result.html에 dic으로 전달해준다.

(+) items() :
딕셔너리 자료구조를 리스트의 자료구조로 변환해주는 기능

  1. result.html에는 받은 dic을 키(단어) : value(갯수)로 보이게 해주기 - 꼭 {{endfor}} 써서 for 끝내줘야 한다
<div style="text-align: center;">
    <body>
    
        <h2>wordcount 결과는 아래와 같습니다</h2>
    
        {{total}}<br><br>
        {% for word, num in dic %} <!--아까 dic에서 키:값 으로 받은 친구를 word num으로 받아주고-->
        {{word}} : {{num}} <br>
        <!--:값으로 나와보이게 해줘-->
        {% endfor %}
        <a href="{% url 'home' %}">홈으로 돌아가기</a>
    </body>
  1. 결과창

좋은 웹페이지 즐겨찾기