2016-11-24 3 views
1

Ich weiß, es gibt viele Post über Django Umleitung. Ich habe jedoch nichts gefunden, was mein Problem ist. Ich weiß nicht, was passiert ist, aber ich habe viel gelesen und habe immer noch nichts darüber gefunden.

Also poste ich meinen Code.

Mein Projekt urls.py:Umleitungsfehler mit Django. Nichts scheint zu funktionieren

from django.conf.urls import url, include 
urlpatterns = [ 
    url(r'^backbone', include('backbone.urls', namespace='backbone')), 
] 

Meine app urls.py

from django.conf.urls import url 
from . import views 
urlpatterns = [ 
    url(r'^/shell$', views.shell, name='shell'), 
    url(r'^/login$', views.login, name='login'), 
] 

Meine app views.py

def shell(request, app='cashier'): 
    if 'user' not in request.session: 
     response = redirect('backbone:login', app=app) 
    else: 
     response = render(request, 'template.html') 
    return response 

def login(request, app): 
    context = { 
     'app': app, 
    } 
    response = render(request, 'backbone/login.html', context) 
    return response 

Der Fehler auf der Konsole erscheinen:

django.urls.exceptions.NoReverseMatch: Reverse for 'login' with arguments '()' and keyword arguments '{'app': 'app'}' not found. 1 pattern(s) tried: ['backbone/login$'] 

Der Fehler auf Browser:

NoReverseMatch at /backbone/shell 
Reverse for 'login' with arguments '()' and keyword arguments '{'app': 'app'}' not found. 1 pattern(s) tried: ['backbone/login$'] 
Request Method: GET 
Request URL: http://192.168.1.79/backbone/shell 
Django Version: 1.10.3 
Exception Type: NoReverseMatch 
Exception Value:  
Reverse for 'login' with arguments '()' and keyword arguments '{'app': 'app'}' not found. 1 pattern(s) tried: ['backbone/login$'] 
Exception Location: /usr/local/lib/python3.5/dist-packages/django/urls/resolvers.py in _reverse_with_prefix, line 392 
Python Executable: /usr/bin/python3 
Python Version: 3.5.2 
Python Path:  
['/home/ipi/workspace/RamoSP', 
'/usr/lib/python35.zip', 
'/usr/lib/python3.5', 
'/usr/lib/python3.5/plat-x86_64-linux-gnu', 
'/usr/lib/python3.5/lib-dynload', 
'/usr/local/lib/python3.5/dist-packages', 
'/usr/lib/python3/dist-packages'] 
Server time: Thu, 24 Nov 2016 19:56:47 +0000 

Ich verstehe nicht. Ich sende die Argumente, die es erfordert, richtig? Ich bin jetzt seit einer Weile fest.

Antwort

4

Nein, Sie versuchen, diese URL zuzugreifen:

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

mit Argumenten, dass es geht nicht davon aus, da es keine Argumente erwarten.

Werfen Sie einen Blick auf this post, speziell die Senden von Parametern an Ansichten Thema. Es hilft Ihnen zu verstehen, warum Sie in dieser URL keine Argumente an die Ansicht senden können.

Übrigens, was Sie wahrscheinlich wollen, ist Abfrageparameter in Ihrer Anfrage an diese URL zu senden. In diesem Fall statt:

redirect('backbone:login', app=app) 

werden Sie zu tun haben:

url = '{}?app={}'.format(reverse('backbone:login'), '?item=4') 
redirect(url) 
+0

Ich möchte den Posten überprüfen du g Ave, aber es ist kein Beitrag, denke ich. –

+0

Whoops, mein Schlechter. Die Verknüpfung wurde korrigiert. – lucasnadalutti

3

Was möchten Sie tun?

/backbone/login?app=cashier 

Lösung: https://stackoverflow.com/a/3766503/6622256

oder

/backbone/login/cashier 

Lösung:

Add Argument 'App' in Ihrer Route Erklärung:

url(r'^login/(?P<app>)$', views.login, name='login'), 
Verwandte Themen