[Python #18] [Django #11] form action 변수 적용 (부제: 타인 글 검색)

in mini.topia4 years ago

pixabay

지난 번 글에서 변수 처리할 줄 몰라 하드 코딩한 부분이 있다.

action은 일단 하드코딩으로 /@june0620/search로 한다. 계정명은 변수로 처리하고 싶은데 안된다. ㅠ (#연구필요#장고초짜)

내 계정으로 하드 코딩했기 때문에 다른 사람의 글은 검색이 안 되는 불편한 진실을 오늘 수정해본다. action 값에 계정명을 동적으로 넣어야 하는데 계정명을 입력받는 곳은 현재 URL밖에 없으니 URL에서 계정명만 추출해야 한다. 다행히 {{ request.path }}로 현재 접속 중인 URL을 가져올 수 있는 듯하다. Template filters로 URL에서 계정명만 추출하면 되겠다.

templatetags

templatetags 폴더 > post_extras.py에 필터를 하나 등록한다. URL을 인자로 받아 계정 추출하는 함수를 쓸 건데 정규 표현식을 동원해야 할 것 같은 느낌이 팍 온다. 아~~ 정규 표현식 모르는데... ㅠㅠ
인터넷에서 여러가지 방법 시도해 보다 가장 무난한 방법으로 가보자.
참고로 이런 정규식 체크 페이지도 있다.
https://regex101.com/r/cO8lqs/4

import re
...
...

@register.filter
def get_account_form_url(path: str):
    account = re.search(r'@[a-z0-9-.]*', path)
    print(path)
    print(account.group(0))
    return account.group(0) if account else None

base.html

이제 base.html 상단에 필터를 load 하고, form action에 필터를 적용하면 되겠다.

{% load post_extras %}
...
...

          <form action="/{{ request.path | get_account_form_url }}/search/" method="get">
              <label >Tags: </label>
              <input id="tags" type="text" name="tags" value="">
              <label >Titles: </label>
              <input id="titles" type="text" name="titles" value="">
              <label >Texts: </label>
              <input id="texts" type="text" name="texts" value="">
              <input type="submit" value="Search">
          </form>  

결과

이제 @gghite 님의 영화 리뷰를 검색해서 볼 수 있다. ㅎ


[Cookie 😅]
Python 3.7.4
Django 2.2.4
steem-python 1.0.1
goorm IDE 1.3

참고한 글:
https://medium.com/@chrisjune_13837/%EC%A0%95%EA%B7%9C%EC%8B%9D-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC-%EC%98%88%EC%A0%9C%EB%A5%BC-%ED%86%B5%ED%95%9C-cheatsheet-%EB%B2%88%EC%97%AD-61c3099cdca8