Template:

<form action="{% url 'new_item' category=category %}" method="post"> 

Urly:

 url(r'^new/(?P<category>[\w\-]+)/$', views.new_item, name='new_item'), 

Representation:

 def new_item(req, category=''): args = dict() args.update(csrf(req)) if req.method == 'POST': if category == 'phone': form = PhoneForm(req.POST, req.FILES) if form.is_valid(): form.save() return redirect('general') else: args['form'] = form return render_to_response('new_item/index.html', args) else: if category == 'phone': args['form'] = PhoneForm() args['category'] = 'phone' return render_to_response('new_item/index.html', args) 

And for a normal link, such a code works, but for a form there is no

 <a href="{% url 'new_item' category=category %}"></a> 

Mistake:

NoReverseMatch at / adminpanel / new / phone / Reverse for 'new_item' with arguments '()' and keyword arguments '{' category ':' '}' not found. 1 pattern (s) tried: ['adminpanel / new / (? P [\ w \ -] +) / $']

    1 answer 1

    In the first part you do not pass the category variable into the template. And accordingly url does not receive argument, therefore and an error.

    The code did not check, but most likely so. Try:

     def new_item(req, category=''): args = dict() args.update(csrf(req)) if req.method == 'POST': if category == 'phone': form = PhoneForm(req.POST, req.FILES) if form.is_valid(): form.save() return redirect('general') else: args['form'] = form args['category'] = 'phone' return render_to_response('new_item/index.html', args) else: if category == 'phone': args['form'] = PhoneForm() args['category'] = 'phone' return render_to_response('new_item/index.html', args 

    )