Search() получил неожиданный ключевой аргумент 'query'
Я хочу реализовать функцию поиска с помощью веб-фреймворка Django. Я работаю над получением публичных данных (API) и получением данных, соответствующих результатам поиска, и отображением их на странице index.html.
Это поисковый вид!
def search(request):
base_url = "http://apis.data.go.kr/5710000/benlService/nltyArtList"
image_api_url = "http://apis.data.go.kr/5710000/benlService/artImgList"
# 검색어 가져오기
search_query = request.GET.get('q', '')
params = { "serviceKey":"gKat/nvnmi8i9zoiX+JsGzCTsAV75gkvU71APhj8FbnH3yX4kiZMuseZunM0ZpcvKZaMD0XsmeBHW8dVj8HQxg==",
"pageNo": "1",
"numOfRows": "5",
"returnType": "json",
"artNm": search_query
}
response = requests.get(base_url, params=params)
if response.status_code == 200:
data = response.json()
art_list = data['response']['body']['items']['item']
# 작품 이미지 정보
for art in art_list:
image_params = {
"serviceKey":"gKat/nvnmi8i9zoiX+JsGzCTsAV75gkvU71APhj8FbnH3yX4kiZMuseZunM0ZpcvKZaMD0XsmeBHW8dVj8HQxg==",
"pageNo": "1",
"numOfRows": "5",
"returnType": "json",
"artNm": art["artNm"] # 'art_name' 대신 'art["artNm"]' 사용
}
image_response = requests.get(image_api_url, params=image_params)
if image_response.status_code == 200:
image_data = image_response.json()
if 'item' in image_data['response']['body']['items']:
art["image_url"] = image_data["response"]["body"]["items"]["item"]["imgUrl"]
else:
art["image_url"] = None
else:
art["image_url"] = None
else:
# 에러 처리
print("API 요청 실패:", response.status_code)
art_list = []
return render(request, 'index.html', {'art_list': art_list, 'search_query': search_query})
Это настройка пути urls.py:
urlpatterns = [# path('', views.index, name='index'), # 예를 들어, index view로 연결path('', views.openapi_view, name='index'),path('search/<str:query>/', views.search, name='search'),]
views.search()
будет вызываться таким образом Django, когда приходит HttpRequest
для URL-пути 'search'
:
views.search(request, "some-query")
Внутреннее устройство немного сложнее, но по сути это все. Ожидается, что этот путь будет вызван HTTP-клиентом следующим образом: "http[s]://DOMAIN/search/some-query/"
.
Поскольку это динамический URL, напишите сигнатуру функции таким образом, чтобы она могла получить значение динамического URL, когда Django вызовет представление с этим значением.
def search(request, query: str):
#•••Rest of code•••
Подсказка типа не требуется.