How Can I Fix - 'set' object is not reversible

I am working on a tutorial by Dave Gray. Everything was working fine up till when I did the Challenge in chapter 8. When I now run the development server I get an error saying Error during template rendering. In template C:\Users\ZACKAMATA\Documents\Learn Python\Django\Dave Gray\Lesson01\myproject\templates\layout.html, error at line 19

‘set’ object is not reversible

This is the layout.html file

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/

Django Version: 5.1.4
Python Version: 3.12.3
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'posts',
 'users']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']


Template error:
In template C:\Users\ZACKAMATA\Documents\Learn Python\Django\Dave Gray\Lesson01\myproject\templates\layout.html, error at line 19
   'set' object is not reversible
   9 :           Django App
   10 :         {% endblock title %}
   11 :     </title>
   12 :     <link rel="stylesheet" href="{% static 'css/style.css' %}">
   13 :     <script src="{% static 'js/main.js' %}" defer></script>
   14 : </head>
   15 : <body>
   16 :     <nav>
   17 :         <a href="/">Home</a> 
   18 :         <a href="/about">About</a> 
   19 :         <a href=" {% url 'posts:list' %} ">Posts</a>
   20 :     </nav>
   21 :     <main>
   22 :         {% block content %}
   23 :         {% endblock content %}
   24 :     </main>
   25 : </body>
   26 : </html>

Traceback (most recent call last):
  File "C:\Users\ZACKAMATA\Documents\Learn Python\Django\Dave Gray\Lesson01\.venv\Lib\site-packages\django\core\handlers\exception.py", line 55, in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ZACKAMATA\Documents\Learn Python\Django\Dave Gray\Lesson01\.venv\Lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ZACKAMATA\Documents\Learn Python\Django\Dave Gray\Lesson01\myproject\myproject\views.py", line 7, in homepage
    return render(request, "home.html")
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ZACKAMATA\Documents\Learn Python\Django\Dave Gray\Lesson01\.venv\Lib\site-packages\django\shortcuts.py", line 25, in render
    content = loader.render_to_string(template_name, context, request, using=using)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ZACKAMATA\Documents\Learn Python\Django\Dave Gray\Lesson01\.venv\Lib\site-packages\django\template\loader.py", line 62, in render_to_string
    return template.render(context, request)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ZACKAMATA\Documents\Learn Python\Django\Dave Gray\Lesson01\.venv\Lib\site-packages\django\template\backends\django.py", line 107, in render
    return self.template.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ZACKAMATA\Documents\Learn Python\Django\Dave Gray\Lesson01\.venv\Lib\site-packages\django\template\base.py", line 171, in render
    return self._render(context)
           ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ZACKAMATA\Documents\Learn Python\Django\Dave Gray\Lesson01\.venv\Lib\site-packages\django\template\base.py", line 163, in _render
    return self.nodelist.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ZACKAMATA\Documents\Learn Python\Django\Dave Gray\Lesson01\.venv\Lib\site-packages\django\template\base.py", line 1008, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ZACKAMATA\Documents\Learn Python\Django\Dave Gray\Lesson01\.venv\Lib\site-packages\django\template\base.py", line 969, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ZACKAMATA\Documents\Learn Python\Django\Dave Gray\Lesson01\.venv\Lib\site-packages\django\template\loader_tags.py", line 159, in render
    return compiled_parent._render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ZACKAMATA\Documents\Learn Python\Django\Dave Gray\Lesson01\.venv\Lib\site-packages\django\template\base.py", line 163, in _render
    return self.nodelist.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ZACKAMATA\Documents\Learn Python\Django\Dave Gray\Lesson01\.venv\Lib\site-packages\django\template\base.py", line 1008, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ZACKAMATA\Documents\Learn Python\Django\Dave Gray\Lesson01\.venv\Lib\site-packages\django\template\base.py", line 969, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ZACKAMATA\Documents\Learn Python\Django\Dave Gray\Lesson01\.venv\Lib\site-packages\django\template\defaulttags.py", line 480, in render
    url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ZACKAMATA\Documents\Learn Python\Django\Dave Gray\Lesson01\.venv\Lib\site-packages\django\urls\base.py", line 54, in reverse
    app_list = resolver.app_dict[ns]
               ^^^^^^^^^^^^^^^^^
  File "C:\Users\ZACKAMATA\Documents\Learn Python\Django\Dave Gray\Lesson01\.venv\Lib\site-packages\django\urls\resolvers.py", line 637, in app_dict
    self._populate()
    ^^^^^^^^^^^^^^^^
  File "C:\Users\ZACKAMATA\Documents\Learn Python\Django\Dave Gray\Lesson01\.venv\Lib\site-packages\django\urls\resolvers.py", line 574, in _populate
    url_pattern._populate()
    ^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ZACKAMATA\Documents\Learn Python\Django\Dave Gray\Lesson01\.venv\Lib\site-packages\django\urls\resolvers.py", line 548, in _populate
    for url_pattern in reversed(self.url_patterns):
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^

Exception Type: TypeError at /
Exception Value: 'set' object is not reversible

Can you show us your urls.py? It looks like your list of URL patterns may be defined as a set instead of a list. Ensure it has square brackets around it , not curly braces.

1 Like

Thanks. This is the myproject>myproject>urls.py file

"""
URL configuration for myproject project.

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/5.1/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""

from django.contrib import admin  # type:ignore
from django.urls import path, include  # type:ignore
from . import views
from django.conf.urls.static import static  # type:ignore
from django.conf import settings  # type:ignore

urlpatterns = [
    path("admin/", admin.site.urls),
    path("", views.homepage),
    path("about/", views.about),
    path("posts/", include("posts.urls")),
    path("users/", include("users.urls")),
]

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Then the myproject>posts.urls.py file

from django.urls import path  # type:ignore
from . import views

app_name = "posts"

urlpatterns = [
    path("", views.posts_list, name="list"),
    path("<slug:slug>", views.post_page, name="page"),
]

and finally myproject>users>urls.py

rom django.urls import path  # type: ignore
from . import views

app_name = "users"
urlpatterns = {path("register/", views.register, name="register")}

I think I can see where I made a mistake. let me take a look

Thank you @benbacardi .

1 Like

So you got it fixed? Great!