2016-11-24 7 views
0

Alles war in meinem Code perfekt, aber nach, wenn ich hinzufügen (?P<no_of_lines>\d+), um eine von mir url, ich habe Fehler Erhaltene:Django NoReverseMatch an/

NoReverseMatch at /

Reverse for 'day_data_multiadd' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: ['day_data_multiadd/(?P\d+)/$']

Ich habe keine Ahnung, was los ist. Ich bin Anfänger so wahrscheinlich, dass es sehr einfach sein wird ...

views.py:

def get_number_of_lines(request): 
if request.method == 'POST': 
    generate_form = multiadd_generate_form(request.POST) 
    if generate_form.is_valid(): 
     no_of_lines = generate_form.cleaned_data['no_of_lines'] 
     return HttpResponseRedirect(reverse('multi_add', kwargs={'no_of_lines': no_of_lines})) 
else: 
    generate_form = multiadd_generate_form() 
    c = RequestContext(request, {'generate_form': generate_form}) 
    return render_to_response('no_lines.html', c) 



def day_data_multiadd(request, no_of_lines): 
    no_of_lines = int(no_of_lines) 
    CostFormSet = modelformset_factory(Cost, form=data_add_form extra=no_of_lines) 
    if request.method == 'POST': 
     formset = CostFormSet(request.POST, request.FILES) 
     if formset.is_valid(): 
      formset.save() 
    else: 
     formset = CostFormSet() 
     c = RequestContext(request, {'formset': formset}) 
    return render_to_response('multi_add.html', c) 

forms.py

class data_add_form(forms.ModelForm): 
class Meta: 
    model = Cost 
    fields = ['title', 'value', 'publish', 'category'] 

class multiadd_generate_form(forms.Form): 
    formy = forms.IntegerField(max_value=30, min_value=1) 

class BaseLineFormSet(BaseFormSet): 
    def __init__(self, *args, **kwargs): 
     super(BaseLineFormSet, self).__init__(*args, **kwargs) 
     no_of_forms = len(self) 
     for i in range(0, no_of_forms): 
     self[i].fields['formy'].label += "-%d" % (i + 1) 

urls.py

from django.conf.urls import url 
from . import views 

urlpatterns = [ 
    url(r'^$', views.current_detail, name='current_detail'), 
    url(r'^stats$', views.costs_stats, name='costs_stats'), 
    url(r'^(?P<year>\d{4})/(?P<month>\d{2})/$', views.month_stats_detail, name='month_stats_detail'), 
    url(r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/$', views.day_stats_detail, name='day_stats_detail'), 
    url(r'^(?P<year>\d{4})/$', views.year_stats_detail, name='year_stats_detail'), 
    url(r'^day_data_multiadd/(?P<no_of_lines>\d+)/$', views.day_data_multiadd, name='day_data_multiadd'), 
    url(r'^no_line$', views.get_number_of_lines, name='get_number_of_lines'), 
    url(r'^delete/(?P<id>\d+)/$', views.day_data_delete, name='day_data_delete'), 
    url(r'^add$', views.data_add, name='data_add'), 
] 
+2

Der Code, den Sie freigegeben haben, nicht die Ausnahme verursachen. Die Ausnahme erwähnt den Aufruf einer URL mit dem Namen "day_data_multiadd", die ohne (kw) -Args aufgerufen wird. Dies geschieht nicht in den {views, forms} .py-Dateien, die Sie mit uns geteilt haben. – Bjorn

+0

Ich vermute, dass Sie möglicherweise einen Fehler in einer Vorlage haben, wo Sie die URL mit {% url '...'%} konstruieren, weil r '^ day_data_multiadd/(? P \ d +)/$' das richtige Muster ist . – somecallitblues

Antwort

0

Ich habe die Antwort gefunden:

views.py

def day_data_multiadd(request, no_of_lines=0): 
no_of_lines = int(no_of_lines) 
CostFormSet = modelformset_factory(Cost, form=DataAddForm, extra=no_of_lines) 

if request.method == 'POST' and 'form' in request.POST: 
    formset = CostFormSet(request.POST, request.FILES) 
    if formset.is_valid(): 
     formset.save() 
else: 
    formset = CostFormSet(queryset=Cost.objects.none()) 

if request.method == 'POST' and 'no_line' in request.POST: 
    generate_form = MultiaddGenerateForm(request.POST) 
    if generate_form.is_valid(): 
     cd = generate_form.cleaned_data 
     return HttpResponseRedirect(reverse('core_sm:day_data_multiadd', args=(cd['formy'],))) 
else: 
    generate_form = MultiaddGenerateForm() 

return render(request, 'core_sm/costs/multi_add.html', {'formset': formset, 
                 'no_of_lines': no_of_lines, 
                 'generate_form': generate_form}) 

url.py

url(r'^day_data_multiadd/$', views.day_data_multiadd, name='day_data_multiadd'), 
url(r'^day_data_multiadd/(?P<no_of_lines>\d+)/$', views.day_data_multiadd, name='day_data_multiadd'), 
+0

Was fehlte in meiner Antwort? –

1

Sie haben diese irgendwo genannt:

{% url day_data_multiadd %} 

, wo Sie die Anzahl der Zeilen bieten sollte:

{% url day_data_multiadd number_of_lines %} 

Wenn Sie einen Standardwert hinzufügen möchten, so ist das erste Beispiel funktionieren würde,

... 
url(r'^day_data_multiadd/$', views.day_data_multiadd, name='day_data_multiadd'), 
url(r'^day_data_multiadd/(?P<no_of_lines>\d+)/$', views.day_data_multiadd, name='day_data_multiadd'), 
... 

:, müssen Sie ein anderes uRL-Muster und bieten einen Standardwert in der Ansicht hinzufügen
... 
def day_data_multiadd(request, no_of_lines=0): 
    ...