2016-08-16 3 views
1

나는 다음보기가이처럼django-python : NoReverseMatch 문제 : 어떤 인수를 주어야합니까?

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'), 
] 

및 default_add_cal의 템플릿, default_detail_cal.html 같은 수 있습니다 :

{% block content %} 
<form method="POST" action = "{% url 'calbase:default_add_cal' equipment.id %}">{% csrf_token %} 
     {{ formset }} 
     <button type="submit" class="save btn btn-default" name = "calibration">Save</button> 
    </form> 

<a href="{% url 'calbase:default' %}">Back?</a> 
{% endblock %} 

그래서 교정은 장비에 대한 외래 키 : 장비에 여러 가지 교정이있을 수 있으며, 여기서 인라인 폼 세트를 사용하여 사용자가 장비에 교정을 추가 할 수있게하려고합니다. .

에서

NoReverseMatch/calbase/기본/41/칼/ 인수 'default_detail'에 대한 역 '('4 ','1 ')'및 키워드 인자 '{}': 문제는이를 가지고 있다는 것입니다 찾을 수 없습니다. 1 개 패턴 (들) 시도 : 'calbase/기본// $ (P [0-9] +?)']

나야 혼란이 예를 들어, 기기 ID = 41, I는

을위한
return HttpResponseRedirect(reverse('calbase:default_detail', args=(equipment_id))) 

실제로 전달되는 인수는 41 대신 '('4 ','1 ')입니다. 어떻게 될 수 있습니까? 이 문제를 어떻게 해결해야합니까? 덕분에

답변

1

튜플로 인수를 전달해야합니다.

>>> args = 42, 
>>> type(args) 
<class 'tuple'> 
: 심지어 괄호없이

>>> args = (42) 
>>> type(args) 
<class 'int'> 
>>> 
>>> args = (42,) 
>>> type(args) 
<class 'tuple'> 

가 작동 :

args=(equipment_id,‌​) 
#    ^

그 그룹화 괄호는 인수에게 튜플을하지 않습니다 : 그것은 equipment_id가 인수 중 하나 인 상태 args에게 반복자를 만들 것

+0

고마워요! 내 문제를 해결했다. 이 기능에 대해 좀 더 자세히 설명해 주시겠습니까? ","제발? –

+0

@HansongLi 튜플이 정의되는 방식입니다. 싱글 톤 튜플을 만들려면 해당 쉼표를 추가해야합니다. 몇 가지 코드를 추가했습니다. 그게 충분하면 알려주지. –

+0

오, 그거 분명해. 정말 고마워! –