2017-01-06 5 views
-1

나는 Git을 버전 컨트롤로 사용하여 이전에 Python/Django 또는 Git을 사용하지 않고 Python/Django 프로젝트를 개발했다.Django- NoReverseMatch

내가 서버에 수행 한 몇 가지 변경 사항을 적용한 결과, 내가 변경 한 내용이 내가 작업하고 있던 버그를 수정했음을 알았습니다. (버그는 사용자가 선택한 날짜에 고정되거나 저장되지 않는 날짜 값과 관련이 있습니다. 날짜 중 하나를 페이지의 양식), 프로젝트의 다른 부분이 어떻게 든 ('AddsOmits'이라는 제목의 페이지가) 부러졌지만 ... 그 부분을 변경하지 않았으므로 확실하지 않습니다.

master 분기에 변경 사항을 병합하는 동안 발생했던 일부 오류로 인해 이전 커밋을 체크 아웃해야하므로 실제로 수정 된 부분이 프로젝트의 이전 버전에서 나왔을 수 있습니다. 그래서 이것은 이전 커밋에 존재했던 버그 일 수 있습니다.

저는 수정 사항을 업로드하기 전에 라이브 서버의 버전을 되돌려 놓았습니다. 현재 작업하고있는 '날짜'버그를 제외하고 지금은 작동 상태입니다.

내 로컬 컴퓨터에는 라이브 버전 (즉, '날짜'버그가있는 곳)과 동일한 masterdateReceived (즉, '날짜'버그가 수정 된 곳) 하지만 'AddsOmits'페이지가 깨진입니다

내가 dateReceived 분기에 (브라우저에서 'AddsOmits'페이지에 저를해야 링크를 클릭

, 나는라는 페이지가 표시 오전 :.

비용/id/adds_omits의 NoReverseMatch

인수 'export_csv' '(' ')'및 키워드 인자 '{}'을 (를) 찾을 수 없습니다에 대한

역 :

오류 메시지에서 '예외 값'는 다음과 같이 주어진다. 1 개 패턴 (들) 시도 : u'costing// 수출 CSV/$ '(P [0-9] +?)]

및 페이지 거기 Error during template rendering이고, 말한다 :

템플릿 /Users/.../costing/templates/costing/adds_omits.html, 행에 오류에서 28 역 인수 'export_csv' '(' ')'및 키워드 인자 '{}'하지 않는 녹이다. 1 개 패턴 (들) 시도 : [u'costing// 수출 CSV/$ '(P [0-9] +?)]

라인이에 대해 불평 템플릿 (28)은 다음과 같습니다

<a class="button m-r-md" href="{% url 'costing:export_csv' budget.id %}">Export to Excel</a> 

브라우저가 불평하는 오류가보기 costing:export_csv에 대한 호출과 관련이 있으며 URL 패턴이 일치하지 않는 것 같습니다.

import csv 
from django.utils.encoding import smart_str 
def export_csv(request, budget_id): 
    budget = Budget.objects.get(id=budget_id) 
    items = budget.budget_items.all() 
    field_names = ('Build type', 'Build type detail', 'Item type client', 'Room', 'Name', 'Detail', 'Quantity', 'Unit', 'Cpu', 'Materials cost', 'Skill days', 'Labour days', 'Other unit', 'Other rate', 'Line margin', 'Total inc profit', 'Notes') 
    fields = ([1, 'get_build_type_display'], 'build_type_detail', 'item_type_client', [1, 'get_room_name'], 'name', 'detail', 'quantity', 'unit', 'cpu', 'materials_cost', 'skill_days', 'labour_days', 'other_unit', 'other_rate', 'line_margin', 'total_inc_profit', 'notes') 

    response = HttpResponse(content_type='text/csv') 
    response['Content-Disposition'] = 'attachment; filename=Budget-'+budget.project.project_code+'.csv' 
    writer = csv.writer(response, csv.excel) 
    response.write(u'\ufeff'.encode('utf8')) # BOM (optional...Excel needs it to open UTF-8 file properly) 
    writer.writerow([ 
     smart_str(u""+field_name) for field_name in field_names 
    ]) 
    for obj in items: 
     row = [] 
     for field in fields: 
      if field[0] == 1: 
       if hasattr(obj,field[1]): row += [smart_str(u""+plain_char(unicode(getattr(obj,field[1])() or '')))] # For methods such as get_build_type_display() 
      elif hasattr(obj,field): row += [smart_str(u""+plain_char(unicode(getattr(obj,field) or '')))] 
     writer.writerow(row) 
    return response 

의 URL 패턴 : 내가 바로 내 편집기 (승화)에서 템플릿에 costing:export_csv을 클릭하고 '고토 정의'를 선택하면

, 나는 비용/views.py에 view 정의로 이동하고 원가 계산/뷰에 정의 된 view이라고합니다....

url(r'^(?P<budget_id>[0-9]+)/export-csv/$', views.export_csv, name='export_csv'), 

하고 멀리 볼 수있는, 모든 (등 정의 & 통화) 정확하게 일치

은 내가 잘못 여기서 뭐하는 거지 : 평이다? 브라우저의 오류 메시지에있는 '예외 값'은 내가 어딘가에서 인수를 전달해야하거나 다른 전달하는/전달하지 않는 인수를 전달해야한다는 것을 나타내는 것 같습니다 ...?

이 예외의 이유는 무엇이며 어떻게 해결할 수 있습니까? 어떤 도움이라도 대단히 감사 할 것입니다.

def adds_omits(request, project_id): 
    project = Project.objects.select_related('variations').prefetch_related('variations__addomit_set','variations__addomit_set__item').get(id=project_id) 
    budget = get_current_budget(project_id) 
    try: v = project.variations 
    except ObjectDoesNotExist: v = Variations.objects.create(project=project) 
    adds_omits = project.variations.addomit_set.select_related('item', 'item__project_room', 'item__project_room__room').all().order_by('item__build_type', 'item__build_type_detail', 'item__project_room', 'item__order', 'item__id') #Needs id to prevent other ordering within groups 
    budget_items = BudgetItem.objects.select_related('addomit', 'addomit__variations', 'addomit__variations__project', 'project_room', 'project_room__room').filter(addomit__variations=v).order_by('build_type', 'build_type_detail', 'project_room', 'order', 'id') #Needs id to prevent other ordering within groups 
    item_formset = BudgetItemFormsetLite(queryset=budget_items, form_kwargs={"ao":True,'project':project}) 
    ao_formset = AddOmitFormset(instance=v, queryset=adds_omits) 
    formsets = zip(list(item_formset.forms), list(ao_formset.forms)) 

    for i_form in item_formset: 
     for field in i_form.fields: 
      if not field == 'id': 
       i_form.fields[field].widget.attrs['readonly'] = True 
       i_form.fields[field].widget.attrs['disabled'] = True 

    #Used to create new add omits 
    print 'Item form ini' 
    item_form = BudgetItemForm(project=project, template=1) 
    var_type_form = AoVariationTypeForm() 

    context = { 
     'project': project, 
     'formsets': formsets, 
     'ao_formset': ao_formset, 
     'item_formset': item_formset, 
     'var_type_form': var_type_form, 
     'item_form': item_form, 
     'widths': budget_item_column_widths[4:], #First column is add/delete options to allow for forloop count offset 
     'options_width': "5em", #First column is add/delete options to allow for forloop count offset 
     'widths_ao': add_omit_column_widths, 
     'widths_item': budget_item_column_widths, #First column is add/delete options to allow for forloop count offset 
     'labour_rate': labour_day_rate, 
     'skill_rate': skill_day_rate, 

    } 

    return render(request, 'costing/adds_omits.html', context) 
+0

변경 사항을 마스터 분기에 병합하는 동안 발생한 오류는 무엇입니까? 문제의 근원이 있고, 위의 코드와 아무런 관련이 없습니다. – Nevertheless

+0

나는 병합 후에 오류가있는'master' 브랜치를 버렸고,'master'를이 버그에 대한 작업을 시작하기 직전에했던 커밋으로 바 꾸었습니다. 그래서'master' 브랜치는 현재 라이브 작업 버전. 필자가 OP에서 설명한 문제는'dateReceived' 브랜치에만 존재합니다.이 브랜치에서이 브랜치를 고쳐야합니다. 그러면'master'를 서버에 보내기 전에이 브랜치를'master'와 병합 할 수 있습니다. – someone2088

답변

2

오류는 표시하지 않은 costing/id/adds_omits의보기에 있습니다

adds_omitsview 편집가 정의됩니다.

arguments '('',)는 따라서 템플릿 맥락에서 budget 포함되지 않습니다 {% url 'costing:export_csv' budget.id %}에서 budget.id 빈 문자열 ''로 평가되는 것을 의미한다.

+0

답변 해 주셔서 감사합니다. 'adds_omits' 뷰를 보여주기 위해 OP를 업데이트했습니다. '템플릿 컨텍스트에서'예산 '을 포함하지 않는다는 것은 무엇을 의미합니까? 'budget' 객체를 어떻게 든 템플릿으로 가져와야합니까? – someone2088

+2

'return render (request, 'costing/adds_omits.html', context)'에서 사용하는'context' dict에'budget'을 포함시켜야합니다. 템플리트는 'budget'을 사용하여 URL을 역순으로 사용할 수 없습니다. – Alasdair

+0

환상적 - 그걸 해결 한 것 같습니다. 매우 감사합니다! – someone2088