Django -- 视图 MultiValueDictKeyError

Django -- Views MultiValueDictKeyError

我要return 4个不同版本的主页

  1. 带搜索栏的主页。 API
    中没有数据
  2. 带搜索栏的主页。来自 API
    的数据
  3. 带搜索栏的主页。如果 API
  4. 中不存在请求,则不存在数据
  5. 带搜索栏的主页。如果在没有输入任何数据的情况下点击提交按钮,则不存在数据。



版本二、三、四都可以。
但是版本 1,没有 GET 请求的主页不是 returned。由于:

MultiValueDictKeyError at / 'city'" in the views.py file.

如何解决?任何帮助将不胜感激


urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index),
]

views.py

from django.shortcuts import render
import requests

def index(request):
    # Query API with user input 
    payload = {'q': request.GET['city'], 'appid': 'API-KEY'}
    response = requests.get('http://api.openweathermap.org/data/2.5/weather', params=payload)

    # successful request
    if response.status_code == 200:

        # Parse json output for key value pairs 
        e = response.json()

        context = {
            'city_name': e['name'], 
            'weather':e['weather'][0]['main'],
            'description' : e['weather'][0]['description'],
            'temp' : e['main']['temp'],
            'pressure':e['main']['pressure'],
            'humidity':e['main']['humidity'],
            'visibility':e['visibility'],
            'wind_speed':e['wind']['speed'],
            'wind_deg':e['wind']['deg']
            }


        return render(request, 'index.html', {'context': context}) 
    

    else: # returns homepage if invalid city name is given in form
            return render(request, 'index.html')

不要直接调用request.GET['city'],而是先检查是否设置了城市,例如:

if 'city' in request.GET:
    payload = {'q': request.GET['city'], 'appid': 'API-KEY'}