1
resposta

Reverse for 'index' not found

Quando realizo o login de usuário, aparece um erro dizendo que não foi possível localizar o arquivo 'index' do meu código, fiz o teste realizando o redirect para um arquivo HTML dentro do app da função e funcionou, então acredito que o erro se deve ao fato de que o arquivo index está da pasta de outro app, mas segundo o instrutor, isso não iria atrapalhar, e no código dele funcionou, eu até tentei refazer meu código olhando o vídeo para fazer idêntico ao dele, mas não funcionou

Esse é o código da minha função de login:

`

def login(request):

form = LoginForms()
if request.method == 'POST':
    form = LoginForms(request.POST)

    if form.is_valid():
        nome = form['nome_login'].value()
        senha = form['senha_login'].value()

    usuario = auth.authenticate(
        request,
        username = nome,
        password = senha
    )
    if usuario is not None:
        auth.login(request, usuario)
        return redirect('index')
    else:
        return redirect('login')

`

esse é o arquivo urls.py do setup do projeto:

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('galeria.urls')),
    path('', include('usuarios.urls')),
] +static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)

O aplicativo do login aonde está ocorrendo o erro é o 'usuarios', enquanto o arquivo HTML que o login está tentando encontrar está no aplicativo 'galeria'

1 resposta

Olá Wallace! Tudo bem?

O erro "Reverse for 'index' not found" geralmente ocorre quando o Django não consegue encontrar uma URL correspondente ao nome que você forneceu no redirect.

Vamos tentar resolver isso. Primeiro, verifique se no arquivo urls.py do aplicativo galeria, você tem uma URL nomeada como 'index'. Algo como:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    # outras rotas...
]

Se a URL estiver corretamente definida, o problema pode estar na ordem dos include() no seu urls.py principal. Atualmente, você tem:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('galeria.urls')),
    path('', include('usuarios.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

A ordem dos include() é importante. O Django processa as rotas na ordem em que elas aparecem, então, se você tiver duas rotas com o mesmo prefixo (neste caso, ''), a primeira será a que será usada. Tente garantir que as rotas que podem ter conflitos sejam bem definidas e, se necessário, ajuste a ordem ou os prefixos.

Se o problema persistir, uma abordagem alternativa seria usar o namespace dos aplicativos para garantir que o Django encontre a URL correta. Isso envolve adicionar um namespace ao incluir as URLs dos aplicativos. No seu urls.py principal, você pode fazer algo assim:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include(('galeria.urls', 'galeria'), namespace='galeria')),
    path('', include(('usuarios.urls', 'usuarios'), namespace='usuarios')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

E então, no seu redirect, você usaria o namespace:

return redirect('galeria:index')

Espero que essas dicas ajudem a resolver seu problema! Mas, caso não resolva, peço que compartilhe comigo todo o seu código usando o GitHub ou Drive do Google.

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.