NoReverseMatch

46 views
Skip to first unread message

Will Holmes

unread,
Apr 28, 2017, 4:38:46 PM4/28/17
to Django users
Hey all,

Can anyone tell me the (probably quite obvious) reason my reverse match isn't working?

Template:
<form method="post" action="{% url 'cal:delete_event' id %}">
  <input class="btn btn-primary btn-md" id="event-delete" type="submit" value="Delete">
</form>

Url:
url(r'^events/(\d+)/delete_event$', views.delete_event, name='delete_event'),

View:
def delete_event(request, id):
    Events.objects.filter(id=id).delete()
    return redirect("cal:home")

Also, if anyone can tell me a good way to get my delete button I'd be very grateful. 

Cheers,

Will

James Schneider

unread,
Apr 28, 2017, 5:01:33 PM4/28/17
to django...@googlegroups.com

Hey all,

Can anyone tell me the (probably quite obvious) reason my reverse match isn't working?

Post the traceback and urls.py files. You're referencing the 'cal' name space, so the single URL line you posted is not enough to make a determination.

-James

Will Holmes

unread,
Apr 28, 2017, 5:08:05 PM4/28/17
to Django users

Hey,


Traceback:

======================================================================

ERROR: test_event_view (cal.tests.EventsTestCase)

----------------------------------------------------------------------

Traceback (most recent call last):

  File "/Users/williamholmes/organiser/organiser/cal/tests.py", line 79, in test_event_view

    response = self.client.get('/cal/events/1/')

  File "/Users/williamholmes/.virtualenvs/organiser/lib/python3.5/site-packages/django/test/client.py", line 529, in get

    **extra)

  File "/Users/williamholmes/.virtualenvs/organiser/lib/python3.5/site-packages/django/test/client.py", line 333, in get

    return self.generic('GET', path, secure=secure, **r)

  File "/Users/williamholmes/.virtualenvs/organiser/lib/python3.5/site-packages/django/test/client.py", line 409, in generic

    return self.request(**r)

  File "/Users/williamholmes/.virtualenvs/organiser/lib/python3.5/site-packages/django/test/client.py", line 494, in request

    six.reraise(*exc_info)

  File "/Users/williamholmes/.virtualenvs/organiser/lib/python3.5/site-packages/django/utils/six.py", line 686, in reraise

    raise value

  File "/Users/williamholmes/.virtualenvs/organiser/lib/python3.5/site-packages/django/core/handlers/exception.py", line 42, in inner

    response = get_response(request)

  File "/Users/williamholmes/.virtualenvs/organiser/lib/python3.5/site-packages/django/core/handlers/base.py", line 187, in _get_response

    response = self.process_exception_by_middleware(e, request)

  File "/Users/williamholmes/.virtualenvs/organiser/lib/python3.5/site-packages/django/core/handlers/base.py", line 185, in _get_response

    response = wrapped_callback(request, *callback_args, **callback_kwargs)

  File "/Users/williamholmes/organiser/organiser/cal/views.py", line 61, in viewevent

    return render(request, 'view_event.html', {'form':form})

  File "/Users/williamholmes/.virtualenvs/organiser/lib/python3.5/site-packages/django/shortcuts.py", line 30, in render

    content = loader.render_to_string(template_name, context, request, using=using)

  File "/Users/williamholmes/.virtualenvs/organiser/lib/python3.5/site-packages/django/template/loader.py", line 68, in render_to_string

    return template.render(context, request)

  File "/Users/williamholmes/.virtualenvs/organiser/lib/python3.5/site-packages/django/template/backends/django.py", line 66, in render

    return self.template.render(context)

  File "/Users/williamholmes/.virtualenvs/organiser/lib/python3.5/site-packages/django/template/base.py", line 208, in render

    return self._render(context)

  File "/Users/williamholmes/.virtualenvs/organiser/lib/python3.5/site-packages/django/test/utils.py", line 94, in instrumented_test_render

    return self.nodelist.render(context)

  File "/Users/williamholmes/.virtualenvs/organiser/lib/python3.5/site-packages/django/template/base.py", line 994, in render

    bit = node.render_annotated(context)

  File "/Users/williamholmes/.virtualenvs/organiser/lib/python3.5/site-packages/django/template/base.py", line 961, in render_annotated

    return self.render(context)

  File "/Users/williamholmes/.virtualenvs/organiser/lib/python3.5/site-packages/django/template/loader_tags.py", line 174, in render

    return compiled_parent._render(context)

  File "/Users/williamholmes/.virtualenvs/organiser/lib/python3.5/site-packages/django/test/utils.py", line 94, in instrumented_test_render

    return self.nodelist.render(context)

  File "/Users/williamholmes/.virtualenvs/organiser/lib/python3.5/site-packages/django/template/base.py", line 994, in render

    bit = node.render_annotated(context)

  File "/Users/williamholmes/.virtualenvs/organiser/lib/python3.5/site-packages/django/template/base.py", line 961, in render_annotated

    return self.render(context)

  File "/Users/williamholmes/.virtualenvs/organiser/lib/python3.5/site-packages/django/template/defaulttags.py", line 439, in render

    url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)

  File "/Users/williamholmes/.virtualenvs/organiser/lib/python3.5/site-packages/django/urls/base.py", line 91, in reverse

    return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))

  File "/Users/williamholmes/.virtualenvs/organiser/lib/python3.5/site-packages/django/urls/resolvers.py", line 392, in _reverse_with_prefix

    (lookup_view_s, args, kwargs, len(patterns), patterns)

django.urls.exceptions.NoReverseMatch: Reverse for 'delete_event' with arguments '('',)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['cal/events/(\\d+)/delete_event$']


cal:urls:

from django.conf.urls import url, include
from django.contrib import admin
from cal import views, models

app_name = 'cal'
urlpatterns = [
    url(r'^$', views.home, name='home'),
    url(r'^newevent/$', views.newevent, name='newevent'),
    url(r'^events/(\d+)/', views.viewevent, name='viewevent'),
    url(r'^(?P<month>\d+)/(?P<year>\d+)$', views.home, name='another-month'),
    url(r'^events/(\d+)/delete_event$', views.delete_event, name='delete_event'),
]


urls:

from django.conf.urls import url, include
from cal import urls as cal_urls
from accounts import urls as accounts_urls

urlpatterns = [
    url(r'^cal/', include(cal_urls, namespace="cal")),
    url(r'^accounts/', include(accounts_urls)),
]


Let me know if you need anything else. :)


Cheers,


Will

shahab emami

unread,
Apr 28, 2017, 7:31:58 PM4/28/17
to Django users
hi
this is for the id.
your url must be like this:

url(r'^events/((?P<id>\d+))/delete/$', views.delete_event, name='delete_event'),



you also need to give an amount in your template to the id:




action="{% url 'cal:delete_event' id=an_event_id %}">

James Schneider

unread,
Apr 28, 2017, 8:08:45 PM4/28/17
to django...@googlegroups.com


On Apr 28, 2017 4:32 PM, "shahab emami" <royar...@gmail.com> wrote:
hi
this is for the id.
your url must be like this:

url(r'^events/((?P<id>\d+))/delete/$', views.delete_event, name='delete_event'),



you also need to give an amount in your template to the id:




action="{% url 'cal:delete_event' id=an_event_id %}">



Or, the variable 'id' either doesn't exist or isn't populated, also causing the URL look-up to fail, based on the traceback you provided.



django.urls.exceptions.NoReverseMatch: Reverse for 'delete_event' with arguments '('',)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['cal/events/(\\d+)/delete_event$']

The traceback in this case is a bit misleading because of the missing named group in the regex. 

You'll need to fix both issues before the resolution will succeed.

-James

Melvyn Sopacua

unread,
May 1, 2017, 12:11:24 PM5/1/17
to django...@googlegroups.com

On Friday 28 April 2017 16:31:57 shahab emami wrote:

 

> your url must be like this:

>

> url(r'^events/((?P<id>\d+))/delete/$', views.delete_event, name=

> 'delete_event'),

 

No, it MUST not. That just changes the problem from args to kwargs.

 

--

Melvyn Sopacua

Melvyn Sopacua

unread,
May 1, 2017, 12:21:21 PM5/1/17
to django...@googlegroups.com

On Friday 28 April 2017 14:08:05 Will Holmes wrote:

 

> django.urls.exceptions.NoReverseMatch: Reverse for 'delete_event' with

> arguments '('',)'

 

This tells you that id is not handed to the template that renders the view containing this form. Otherwise, arguments would be '('123456',)'.

 

--

Melvyn Sopacua

Reply all
Reply to author
Forward
0 new messages