U mnie ten błąd wystąpił w moim projekcie django z następujących powodów:
Wstawiłem nowe hiperłącze do mojego home.html obecnego w folderze szablonów mojego projektu, jak poniżej:
<input type="button" value="About" onclick="location.href='{% url 'about' %}'">
W views.py miałem następujące definicje count i about:
def count(request):
fulltext = request.GET['fulltext']
wordlist = fulltext.split()
worddict = {}
for word in wordlist:
if word in worddict:
worddict[word] += 1
else:
worddict[word] = 1
worddict = sorted(worddict.items(), key = operator.itemgetter(1),reverse=True)
return render(request,'count.html', 'fulltext':fulltext,'count':len(wordlist),'worddict'::worddict})
def about(request):
return render(request,"about.html")
- W urls.py miałem następujące wzorce adresów URL:
urlpatterns = [
path('admin/', admin.site.urls),
path('',views.homepage,name="home"),
path('eggs',views.eggs),
path('count/',views.count,name="count"),
path('about/',views.count,name="about"),
]
Jak widać w nr. 3 powyżej, w ostatnim wzorcu adresu URL błędnie wywoływałem views.count, podczas gdy musiałem wywoływać views.about. Ta linia fulltext = request.GET['fulltext']
funkcji count (która została błędnie wywołana z powodu błędnego wpisu w urlpatterns) views.py spowodowała wyjątek multivaluedictkeyerror.
Następnie zmieniłem ostatni wzorzec adresu URL w urls.py na prawidłowy, tj. path('about/',views.about,name="about")
I wszystko działało dobrze.
Najwyraźniej początkujący programista w django może popełnić błąd, który popełniłem, błędnie wywołując inną funkcję widoku dla adresu URL, która może oczekiwać innego zestawu parametrów lub przekazywania innego zestawu obiektów w wywołaniu renderowania, zamiast zamierzonego zachowania.
Mam nadzieję, że pomoże to nowicjuszowi w django.