2017-09-12 6 views
0

Je le lien suivant dans mon modèle de projet:Django NoReverseMatch, pas un espace de noms enregistré

<li><a id="toggleLogin" href= "{% url 'login' %}" onclick="toggleLogin();" ><span>Login</span></a></li> <!-- login app 
--> 

le projet url est:

url(r'^login/',loginViews.user_login,name='login'), 

l'application url est:

url(r'^$',views.user_login,name='user_login'), 

et l'ap plicature vue est:

def user_login(request): 
    """User at login view """ 
    # 
    if request.method == 'POST': 
     # First get the username and password supplied 
     username = request.POST.get('username') 
     password = request.POST.get('password') 
     # Django's built-in authentication function: 
     user = authenticate(username=username, password=password) 
     # If we have a user 
     if user: 
      #Check it the account is active 
      if user.is_active: 
       # Log the user in. 
       login(request,user) 
       # Send the user back to some page. 
       # In this case their homepage. 
       return HttpResponseRedirect(reverse('index')) 
      else: 
       # If account is not active: 
       return HttpResponse("Your account is not active.") 
     else: 
      print("Someone tried to login and failed.") 
      print("They used username: {} and password: {}".format(username,password)) 
      return HttpResponse("Invalid login details supplied.") 
    else: 
     #Nothing has been provided for username or password. 
     return render(request, 'login.html', {}) 

Mais une fois le lien cliqué, il renvoie l'erreur django suivante:

NoReverseMatch at /login/ 
'login_app' is not a registered namespace 

doit être cet espace de noms enregistré dans le fichier URL du projet ainsi?

Répondre

0

Droit! donc la bonne façon serait:

html:

<li><a id="toggleLogin" href= "{% url 'login_app:user_login' %}" onclick="toggleLogin();" 

projet url:

url(r'^login/',include('login_app.urls',namespace='login_app')), 

et l'application url:

url(r'^$',views.user_login,name='user_login'), 

Bien que cela mène à une autre question concernant l'exécution de la fonction javascript en ligne. Mais je vais créer une nouvelle question pour cela. Merci.

1

Vous n'utilisez pas du tout l'application "url". Vous avez entièrement défini l'URL dans l'URL du projet (login), donc aucun namespace n'est créé. Normalement, vous utiliseriez include pour créer un lien vers les URL de l'application, mais vous ne le faites pas.