Cześć, mam irytujący problem.
Mam taki wzorzec adresu URL:
# mproject/myapp.urls.py
url(r'^project/(?P<project_id>\d+)/$','user_profile.views.EditProject',name='edit_project'),
działa dobrze w przeglądarce, ale do testów, kiedy robię to w powłoce:
from django.test import Client
from django.core.urlresolvers import reverse
client= Client()
response = client.get(reverse('edit_project'), project_id=4)
Jestem przerażony:
NoReverseMatch: Reverse for 'edit_project' with arguments '()' and keyword arguments '{}' not found.
Czego tu brakuje?
django
django-testing
Darwin Tech
źródło
źródło
from django.urls import reverse
Odpowiedzi:
Musisz określić
project_id
:Doktor tutaj
źródło
Rozwiązanie @ miki725 jest absolutnie poprawne. Alternatywnie, jeśli chcesz użyć
args
atrybutu, a nie atrybutukwargs
, możesz po prostu zmodyfikować kod w następujący sposób:Przykład tego można znaleźć w dokumentacji . Zasadniczo robi to to samo, ale atrybuty są przekazywane jako argumenty. Pamiętaj, że wszystkie przekazywane argumenty muszą mieć przypisaną wartość, zanim zostaną odwrócone. Po prostu użyj poprawnej przestrzeni nazw, którą w tym przypadku jest
'edit_project'
.źródło
Te problemy przyprawiały mnie o wielki ból głowy, gdy próbowałem użyć rewersu do wygenerowania linku aktywacyjnego i oczywiście wysłać go e-mailem. Więc myślę, że z tests.py będzie tak samo. Prawidłowy sposób na zrobienie tego jest następujący:
źródło
Rozwiązanie jest również prostsze
Dokumentacja dotycząca tego skrótu
źródło