Django Зворотно з аргументами '()' та аргументами ключових слів '{}' не знайдено


144

Привіт, у мене є гнівна проблема.

У мене такий шаблон URL:

# mproject/myapp.urls.py

url(r'^project/(?P<project_id>\d+)/$','user_profile.views.EditProject',name='edit_project'),

він працює добре в браузері, але для тестування, коли я це роблю в оболонці:

from django.test import Client
from django.core.urlresolvers import reverse

client= Client()
response = client.get(reverse('edit_project'), project_id=4)

Мені страшно:

NoReverseMatch: Reverse for 'edit_project' with arguments '()' and keyword arguments '{}' not found.

Що я тут пропускаю?


у останній django , зворотний імпорт із URL-адрес. тобтоfrom django.urls import reverse
suhailvs

Відповіді:



6

Рішення @ miki725 абсолютно правильне. Крім того, якщо ви хочете використовувати argsатрибут на відміну від kwargs, ви можете просто змінити код таким чином:

project_id = 4
reverse('edit_project', args=(project_id,))

Приклад цього можна знайти в документації . Це по суті робить те саме, але атрибути передаються як аргументи. Пам'ятайте, що будь-яким переданим аргументам потрібно присвоїти значення перед тим, як повернути їх назад. Просто використовуйте правильну область імен, яка в цьому випадку є 'edit_project'.


1
Мені подобається її стислість.
Бартлбі

2

Ці проблеми дали мені великий головний біль, коли я намагався використовувати зворотний для створення активації посилання та, звичайно, надсилати його електронною поштою. Так що я думаю, що з test.py це буде те саме. Правильний спосіб зробити це:

from django.test import Client
from django.core.urlresolvers import reverse

#app name - name of the app where the url is defined
client= Client()
response = client.get(reverse('app_name:edit_project', project_id=4)) 

1
Я просто спробував це, це не працює. @ miki725 відповідь правильна.
Даніель ван Флаймен

1
Я вважаю, що брекет знаходиться в неправильному місці: response = client.get (зворотний ('edit_project', project_id = 4))
Вім Фейєн

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.