webentwicklung-frage-antwort-db.com.de

Django 2.0 Pfadfehler?: (2_0.W001) hat eine Route, die '(? P <' enthält, beginnt mit einem '^' oder endet mit einem '$'

Ich bin neu bei Django und versuche, den Back-End-Code für eine Musikanwendung auf meiner Website zu erstellen.

Ich habe die richtige Ansicht in meiner Datei views.py (im richtigen Verzeichnis) erstellt (siehe unten):

def detail(request, album_id):
    return HttpResponse("<h1>Details for Album ID:" + str(album_id) + "</h1>")

wenn Sie jedoch die URL oder den Pfad dafür erstellen (siehe unten)

#/music/71/ (pk)
path(r'^(?P<album_id>[0-9])/$', views.detail, name='detail'),

Auf meinem Terminal wird eine Warnung angezeigt:

?: (2_0.W001) Your URL pattern '^(?P<album_id>[0-9])/$' [name='detail'] has a route that contains '(?P<', begins with a '^', or ends with a '$'. This was likely an oversight when migrating to Django.urls.path().

immer wenn auf /music/ (für den der Pfad funktioniert) eine Zahl folgt, wie /music/1 (was ich möchte, kann die Seite nicht gefunden werden), kann die Seite nicht gefunden werden und das Terminal gibt die obige Warnung aus.

Es kann ein einfacher Fehler sein und ich bin nur dumm, aber ich bin neu in Django und den Python-Regex-Anweisungen, also wird jede Hilfe geschätzt.

29
Joe Tynan

Die neue path() -Syntax in Django 2.0 verwendet keine regulären Ausdrücke. Sie wollen etwas wie:

path('<int:album_id>/', views.detail, name='detail'),

Wenn Sie einen regulären Ausdruck verwenden möchten, können Sie re_path() verwenden.

re_path(r'^(?P<album_id>[0-9])/$', views.detail, name='detail'),

Das alte url() funktioniert immer noch und ist jetzt ein Alias ​​für re_path, aber es wird wahrscheinlich in der Zukunft veraltet.

url(r'^(?P<album_id>[0-9])/$', views.detail, name='detail'),
56
Alasdair

Um @alasdair etwas hinzuzufügen, habe ich re_path als Teil des Include hinzugefügt und es funktioniert gut. Hier ist ein Beispiel

Füge re_path deinem Import hinzu (für Django 2.0)

from Django.urls import path, re_path

urlpatterns = [
    path('admin/', admin.site.urls),
    re_path(r'^$', home, name='home'),

]
8
Stryker

Anstelle von 're_path' können Sie auch '' (leere Zeichenfolge) als erstes Argument Ihres Pfads () verwenden. Ich habe es benutzt und es hat für mich funktioniert.

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',views.index,name='index'),
]
5
Akash Gupta

Verwenden Sie eine leere Zeichenfolge '' anstelle von '/' oder r '^ $'. Es wirkt wie ein Zauber. Code ist wie folgt:

from Django.urls import path, re_path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', home, name='home'),
]
1
DILIP

Wenn dies nicht funktioniert, fügen Sie diesen Code zu yoursite\urls.py in urlpatterns hinzu:

path('music/<int:album_id>/', views.detail, name="detail"),
0
Hamza Naji