• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

get method로 data 넘기는데 받지를 못합니다.

22.05.17 12:12 작성 조회수 120

0

1. login 페이지에서 '서울' 입력시

2. agency_check page로 넘어가서 '서울'이 포함된 기관 목록을 나타냅니다. 위 목록을 클릭시, 다시 처음 login 페이지로 넘어가서 기관명 입력하는 곳에 '서울시청'이 자동으로 입력되도록 코드를 짯습니다.

3. 실제로는 위 input text value에서 아무 값도 나오지를 않습니다. 

위 링크처럼 /login/?agency_name=서울시청이라 get 메소드로 보낸것은 확인이 되는데 안받아져서 무엇이 문제인지 질문 드립니다.

# views.py
def login(request):
    agency_name = request.GET.get('agency_name')
    userInfo = UserInfo.objects.all()
    context = {'userInfo': userInfo, 'agency_name': agency_name, 'test1': 'test1'}
    return render(request, 'test1/login.html', context)


def agency_check(request):
    temp = request.POST.get('agency_keyword')   # html에서 name = 'agency_keyword' 으로 보낸 값 받음
    agencyList = AgencyList.objects.filter(agency_name__contains=temp).order_by('agency_name')
    context = {'agencyList': agencyList, 'agencyKeyword': temp}
    return render(request, 'test1/agency_check.html', context)

 

<!-- login.html -->
<form action="{% url 'test1:agency_check' %}" method="post" name="form1">
            {% csrf_token %}
            <div class="mt-5 mb-3">
                <div>
                        <div class="mt-3">
                            <p class="fw-bold">기관명</p>
                        </div>
                        {{ agency_name }}
                        {{ test1.text }}
                        <input type="text" class="form-control w-75 d-inline-block bg-light" name="agency_keyword" id="agency_keyword" value="{{ agency_name }}">

                        <input type="submit" class="btn btn-light btn-outline-dark ms-2" value="조회">
                </div>
            </div>
        </form>

답변 2

·

답변을 작성해보세요.

1

아. LoginView 가 있고, login 뷰도 따로 있으신 경우군요.

LoginView를 통해서 login/ 요청이 처리가 되고 있으니, request.GET 데이터를 context data로 지정하신 로직이 LoginView에는 없는 상황인 것이죠.

1) LoginView에서 get_context_data 메서드를 재정의하시어 추가로 context data를 지정하실 수도 있구요.

2) 장고 템플릿에서는 context processors로서 request 값을 참조할 수 있습니다. 그러니 아래의 HTML 문자열에서 value 에 값을 지정하시는 것이 목적이시라면
<input type="text" id="agency_keyword" value="{{ agency_name }}" />

다음과 같이 직접적으로 값을 참조하실 수도 있습니다.
<input type="text" id="agency_keyword" value="{{ request.GET.agency_name }}" />

하지만, 장고 Form 클래스 처리에 익숙하시다면, agency_name 폼필드를 추가하시어 Form 클래스의 인스턴스 생성 시에 initial 인자로 agency_name 값을 지정해주시는 방법도 좋습니다.

화이팅입니다. :-)

다양한 방법이 있네요.. 좀더 장고 공부를 열심히 하겠습니다 답변 감사합니다~

1

안녕하세요.

login 뷰에서 request.GET을 참조하는 부분부터 값이 생각하신 대로 넘어오는 지, print 구문 혹은 디버거를 물리셔서 차근차근 확인해보시면 금새 답을 찾으실 수 있습니다. 당연히 문제가 없겠지라고 그냥 넘긴 부분에서 대개 이슈가 있습니다.

아래와 같이 django-debug-toolbar를 통해 템플릿 렌더링 시에 지정된 context 값을 확인해보실 수도 있구요.

보여주신 코드에서는 문제가 없어보이는데요. 보여주신 코드 외적으로 뷰가 다른 뷰를 타고 있을 수도 있고 다른 템플릿이 활용되고 있을 수도 있습니다.

차근차근 확인해보시고, 다시 질문 부탁드립니다.

화이팅입니다. :-)

선생님 말씀처럼 django-debug-toolbar로 확인해보니, 주소로는 넘어왔는데, 실제로는 안넘어왔네요.

# urls.py
app_name = 'test1'

urlpatterns = [
    path('login/', LoginView.as_view(template_name='test1/login.html'), name='login'),
    path('logout/', LogoutView.as_view(), name='logout'),
    path('agency_check/', views.agency_check, name='agency_check'),
]

저가 아까 urls.py를 못올렸는데, 선생님 말씀처럼 LoginView를 타서 위 문제가 발생하는거 같습니다.

 

그 다음 문제를 해결하기 위해 무엇을 해야 할 지 잘 모르겠습니다.

어느 부분을 건드리면 좋을까요?

 

아니면 login창은 계속 살아있고, 검색 목록이 팝업창으로 뜨고 검색값 클릭시 그 값이 input text value에 들어가도록 하는게 더 좋은 접근 방법일까요?

 

항상 좋은 답변 해주셔서 감사합니다. :)

{{ request.GET.agency_name }} 하니까 나오네요

강의 다시 복습 하겠습니다 ㅎㅎ