是否可以在 Django 重定向中传递两个变量?

问题描述 投票:0回答:1

我正在尝试使用两个变量在 Django 中创建动态 URL,如下所示:

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']
是否可以像我尝试的那样传递两个变量?

python django
1个回答
0
投票

是否可以传递两个变量

是的,这是可能的。

您收到以下错误:

未找到参数“(45,)”的“fin-data-update”的反向

这表明你的论点之一缺失。 (可能是你的

fintype
变量

在重定向之前,请确保

fintype
pk
参数都存在。

# your code
if fintype and pk:
    return redirect('boost:fin-data-update', kwargs={'fintype': fintype, 'pk': pk})

# rest of your code
© www.soinside.com 2019 - 2024. All rights reserved.