django python:NoReverseMatch问题:我应该给它什么参数?
我有以下意见:django python:NoReverseMatch问题:我应该给它什么参数?,python,django,django-urls,Python,Django,Django Urls,我有以下意见: def default_detail (request, equipment_id): equipment = Equipment.objects.get(id = equipment_id) context = {'equipment' : equipment} return render(request, 'calbase/default_detail.html', context) def default_add_cal (request, eq
def default_detail (request, equipment_id):
equipment = Equipment.objects.get(id = equipment_id)
context = {'equipment' : equipment}
return render(request, 'calbase/default_detail.html', context)
def default_add_cal (request, equipment_id):
equipment = get_object_or_404(Equipment, id = equipment_id)
EquipmentInlineFormSet = inlineformset_factory(Equipment, Calibration, fields = ('cal_by', 'cal_date', 'notes'), extra = 1, )
if request.method == "POST":
if 'calibration' in request.POST:
formset = EquipmentInlineFormSet(request.POST, request.FILES, instance=equipment)
if formset.is_valid():
return HttpResponseRedirect(reverse('calbase:default_detail', args=(equipment_id)))
else:
formset = EquipmentInlineFormSet(instance=equipment)
return render(request, 'calbase/default_detail_cal.html', {'formset' : formset, 'equipment' : equipment})
URL如下所示:
urlpatterns = [
url(r'^$', views.default, name = 'default'),
url(r'^default/(?P<equipment_id>[0-9]+)/$', views.default_detail, name = 'default_detail'),
url(r'^default/new/$', views.default_new, name = 'default_new'),
url(r'^default/(?P<equipment_id>[0-9]+)/cal/$', views.default_add_cal, name = 'default_add_cal'),
]
实际传递的参数是“('4','1')”而不是41。这怎么可能?我应该如何解决这个问题?谢谢您应该将参数作为元组传递。这将使
args
成为一个iterable,其中equipment\u id
是一个参数:
args=(equipment_id,)
# ^
这些分组括号不会使参数成为元组:
>>> args = (42)
>>> type(args)
<class 'int'>
>>>
>>> args = (42,)
>>> type(args)
<class 'tuple'>
>参数=(42)
>>>类型(args)
>>>
>>>args=(42,)
>>>类型(args)
即使没有帕伦夫妇也能工作:
>>> args = 42,
>>> type(args)
<class 'tuple'>
>args=42,
>>>类型(args)
谢谢!这解决了我的问题。请你详细说明一下这个“please”的功能好吗?@HansongLi元组就是这样定义的。要创建单元组,需要添加逗号。我添加了一些代码。如果足够的话,请告诉我
>>> args = (42)
>>> type(args)
<class 'int'>
>>>
>>> args = (42,)
>>> type(args)
<class 'tuple'>
>>> args = 42,
>>> type(args)
<class 'tuple'>