Para mim, esse erro ocorreu no meu projeto django devido ao seguinte:
Inseri um novo hiperlink em meu home.html presente na pasta de modelos do meu projeto, como abaixo:
<input type="button" value="About" onclick="location.href='{% url 'about' %}'">
No views.py, eu tinha as seguintes definições de count e 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")
- No urls.py, eu tinha os seguintes padrões de 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"),
]
Como pode ser visto no n. 3 acima, no último padrão de URL, eu estava chamando incorretamente o views.count, enquanto eu precisava chamá-lo. A fulltext = request.GET['fulltext']
função line in count (que foi chamada erroneamente por causa da entrada incorreta nos padrões de URL) do views.py lançou a exceção multivaluedictkeyerror.
Então mudei o último padrão de URL em urls.py para o correto path('about/',views.about,name="about")
, ou seja , e tudo funcionou bem.
Aparentemente, em geral, um programador iniciante no django pode cometer o erro que cometi ao chamar outra função de visualização para um URL, o que pode estar esperando um conjunto diferente de parâmetros ou passando um conjunto diferente de objetos em sua chamada de renderização, em vez do comportamento pretendido.
Espero que isso ajude algum programador iniciante no django.