Django не находит страницу перенаправления
Ребята, у меня есть следующие коды, я пытаюсь перенаправить представление GoalUpdate на GoalPageView, но получаю следующую ошибку:
Поиск для 'Goals.views.GoalPageView' с ключевыми аргументами '{'kwargs': {'username': 'admin', 'goal_id': '1'}}' не найден. Попытка 1 шаблона(ов): ['people/(?P[^/]+)/goals/(?P<goal_id>[^/]+)/\Z']
Мои URL
urlpatterns = [
path('<username>/goals/',GoalsView,name='Goals'),
path('<username>/goals/<goal_id>/',GoalPageView,name='Goal Page'),
path('<username>/goals/<goal_id>/update/',GoalUpdate,name='Goal Update'),
]
Мои взгляды:
def GoalPageView(request,username,goal_id):
some view code
return render(request,'goal_page.html',context=context)
def GoalUpdate(request,username,goal_id):
Some View Code
return redirect(GoalPageView,kwargs={'username':username,'goal_id':goal_id})
redirect не принимает args и kwargs, а использует позиционные и именованные параметры напрямую, так:
def GoalUpdate(request, username, goal_id):
# some view code …
return redirect('Goal Page', username=username, goal_id=goal_id)
Примечание: Функции обычно пишутся в snake_case, а не PascalCase, поэтому следует рекомендуется переименовать вашу функцию в
goal_update, а не.GoalUpdate
Вы должны использовать name из url, а не сам View. Чтобы добавить kwargs, например, вы можете использовать reverse_lazy:
return redirect(reverse_lazy('Goal Page', kwargs={'username':username, 'goal_id':goal_id}))
Но я думаю, что Виллем дал вам более простое решение.