Привет, у меня неприятная проблема.
У меня есть такой шаблон 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
django-testing
Дарвин Тек
источник
источник
from django.urls import reverse
Ответы:
Вы должны указать
project_id
:reverse('edit_project', kwargs={'project_id':4})
Док здесь
источник
Решение @ miki725 абсолютно правильное. В качестве альтернативы, если вы хотите использовать
args
атрибут вместоkwargs
, то вы можете просто изменить свой код следующим образом:project_id = 4 reverse('edit_project', args=(project_id,))
Пример этого можно найти в документации . По сути, это то же самое, но атрибуты передаются как аргументы. Помните, что любым переданным аргументам необходимо присвоить значение перед их отменой. Просто используйте правильное пространство имен, которым в данном случае является
'edit_project'
.источник
Эти проблемы вызвали у меня большую головную боль, когда я попытался использовать реверс для создания ссылки активации и, конечно же, отправить ее по электронной почте. Я думаю, что с tests.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))
источник
Resolve также проще
from django.urls import resolve resolve('edit_project', project_id=4)
Документация по этому ярлыку
источник