O NoReverseMatch
erro está dizendo que o Django não consegue encontrar um padrão de url correspondente para o url que você forneceu em nenhum dos urls do seu aplicativo instalado.
A exceção NoReverseMatch é gerada por django.core.urlresolvers quando uma URL correspondente em seu URLconf não pode ser identificada com base nos parâmetros fornecidos.
Para começar a depurar, você precisa começar detectando a mensagem de erro fornecida a você.
NoReverseMatch em / my_url /
Este é o url que está sendo renderizado no momento, é este url que seu aplicativo está tentando acessar, mas contém um url que não pode ser correspondido
Reverter para 'my_url_name'
Este é o nome do url que não consegue encontrar
com argumentos '()' e
Estes são os argumentos não-palavra-chave fornecidos ao url
argumentos de palavra-chave '{}' não encontrados.
Estes são os argumentos de palavra-chave fornecidos ao url
n padrão (s) tentado (s): []
Estes são os padrões que ele conseguiu encontrar em seus arquivos urls.py com os quais tentou fazer a correspondência
Comece localizando o código em sua fonte relevante para a url que está sendo renderizada - a url, a visualização e quaisquer modelos envolvidos. Na maioria dos casos, essa será a parte do código que você está desenvolvendo atualmente.
Depois de fazer isso, leia o código na ordem que django seguiria até chegar à linha de código que está tentando construir uma url para o seu my_url_name
. Novamente, isso provavelmente está em um lugar que você mudou recentemente.
Agora que você descobriu onde o erro está ocorrendo, use as outras partes da mensagem de erro para resolver o problema.
O nome do url
- Existem erros de digitação?
- Você forneceu o url com o qual está tentando acessar o nome fornecido?
- Se você definiu app_name no aplicativo
urls.py
(por exemplo app_name = 'my_app'
) ou se incluiu o aplicativo com um namespace (por exemplo include('myapp.urls', namespace='myapp')
, você precisa incluir o namespace ao reverter, por exemplo, {% url 'myapp:my_url_name' %}
ou reverse('myapp:my_url_name')
.
Argumentos e argumentos de palavras-chave
Os argumentos e argumentos de palavra-chave são usados para corresponder a quaisquer grupos de captura presentes no url fornecido, que podem ser identificados pelos ()
colchetes no padrão de url.
Presumindo que o url que você está correspondendo exija argumentos adicionais, dê uma olhada na mensagem de erro e primeiro verifique se o valor para os argumentos fornecidos parece estar correto.
Se eles não estiverem corretos:
O valor está faltando ou uma string vazia
Isso geralmente significa que o valor que você está transmitindo não contém o valor que você espera que seja. Dê uma olhada onde você atribui o valor a ele, define pontos de interrupção e você precisa descobrir por que esse valor não é transmitido corretamente.
O argumento da palavra-chave contém um erro de digitação
Corrija isso no padrão de url ou no url que você está construindo.
Se estiverem corretos:
Depurar o regex
Você pode usar um site como regexr para testar rapidamente se seu padrão corresponde ao url que você pensa que está criando, copie o padrão de url para o campo regex na parte superior e, em seguida, use a área de texto para incluir quaisquer urls que você acha que estão deve corresponder contra.
Erros comuns:
Correspondência com o .
caractere curinga ou qualquer outro caractere regex
Lembre-se de inserir um \
prefixo nos caracteres específicos
Correspondendo apenas a caracteres minúsculos / maiúsculos
Tente usar a-Z
ou em \w
vez de a-z
ouA-Z
Verifique se o padrão que você está combinando está incluído nos padrões experimentados
Se não estiver aqui, é possível que você tenha esquecido de incluir seu aplicativo na INSTALLED_APPS
configuração (ou a ordem dos aplicativos INSTALLED_APPS
pode precisar ser examinada)
Versão Django
No Django 1.10, a capacidade de reverter uma url por seu caminho python foi removida. O caminho nomeado deve ser usado.
Se você ainda não conseguiu rastrear o problema, sinta-se à vontade para fazer uma nova pergunta que inclua o que você tentou, o que você pesquisou (você pode criar um link para esta questão) e, em seguida, inclua o código relevante para o problema - o url que você está combinando, quaisquer padrões de url relevantes, a parte da mensagem de erro que mostra o que o django tentou combinar e, possivelmente, a INSTALLED_APPS
configuração, se aplicável.
set app_name in the app's urls.py (e.g. app_name = 'my_app')
é o pontoE certifique-se de sua rota na lista de rotas:
https://github.com/django-extensions/django-extensions
fonte
show_urls
não é um recurso do Django, isso não responderá à pergunta.