Можно ли передать две переменные в редиректе Django?
Я пытаюсь создать динамические URL в Django с двумя переменными, как показано ниже:
path('fin-data-add/<str:fintype>/fin-data-update/<str:pk>', views.finDataUpdate, name='fin- data-update'),
path('fin-data-add/\<str:fintype\>/fin-data-delete/\<str:pk\>', views.finDataDelete, name='fin-data-delete')
path('fin-data-add/\<str:fintype\>/fin-categories/fin-categories-delete/\<str:pk\>', views.finCatDelete, name='fin-categories-delete')
И я пытаюсь передать эти переменные в файле views.py следующим образом:
@login_required(login_url='home:login')
def finDataUpdate(request, fintype, pk):
expense = Expenses.objects.get(id=pk)
form = ExpenseForm(instance=expense)
if request.method == 'POST':
form = ExpenseForm(request.POST, instance=expense)
if form.is_valid():
obj = form.save(commit=False)
obj.user = request.user
obj.save()
return redirect('boost:fin-data-update', kwargs={'fintype': fintype, 'pk': pk})
database = Expenses.objects.all()
fin_type = 'Expense'
fin_type_plural = 'Expenses'
context = {'form': form,
'database': database,
'fin_type': fin_type,
'fin_type_plural': fin_type_plural}
return render(request, 'boost/fin-data-update.html', context)
Но я получаю следующую ошибку:
NoReverseMatch at /boost/fin-data-add/expense Reverse for 'fin-data-update' with arguments '(45,)' not found. 1 pattern(s) tried: ['boost/fin\\-data\\-add/(?P<fintype>[^/]+)/fin\\-data\\-update/(?P<pk>[^/]+)\\Z']
Возможно ли передать две переменные, как я пытаюсь?
Можно ли передать две переменные
Да, это возможно.
Вы получаете следующую ошибку:
Поиск для 'fin-data-update' с аргументами '(45,)' не найден
Это говорит о том, что один из ваших аргументов отсутствует. ( возможно, вашей fintype
переменной )
Решение:
перед перенаправлением убедитесь, что оба аргумента fintype
и pk
существуют.
# your code
if fintype and pk:
return redirect('boost:fin-data-update', kwargs={'fintype': fintype, 'pk': pk})
# rest of your code
Если действительно отсутствует fintype
, то это уже другая проблема.