[Django]-Django – Reverse for '' not found. '' is not a valid view function or pattern name

93πŸ‘

βœ…

When you use the url tag you should use quotes for string literals, for example:

{% url 'products' %}

At the moment product is treated like a variable and evaluates to '' in the error message.

πŸ‘€Alasdair

51πŸ‘

  1. The syntax for specifying url is {% url namespace:url_name %}. So, check if you have added the app_name in urls.py.
  2. In my case, I had misspelled the url_name. The urls.py had the following content path('<int:question_id>/', views.detail, name='question_detail') whereas the index.html file had the following entry <li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>. Notice the incorrect name.
πŸ‘€Aditya Mishra

27πŸ‘

I was receiving the same error when not specifying the app name before pattern name.
In my case:

app-name : Blog

pattern-name : post-delete

reverse_lazy('Blog:post-delete') worked.

πŸ‘€Krishna

11πŸ‘

Add store name to template like {% url 'app_name:url_name' %}

App_name = store

In urls.py,
path('search', views.searched, name="searched"),

<form action="{% url 'store:searched' %}" method="POST">

πŸ‘€Kamar

9πŸ‘

You can use one of these.

If you did not (app_name)
This is the solution

in urls.py

urlpatterns = [
    path('', dashboard.as_view(), name='dashboard'),
]

in template.html

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

If you did (app_name)
This is the solution

in urls.py

app_name = 'Blog'
urlpatterns = [
    path('', dashboard.as_view(), name='dashboard'),
]

in template.html

<a href="{% url 'Blog:dashboard' %}"></a>
πŸ‘€shoja

8πŸ‘

Specify app_name in the urls.py file of an app and use this app_name along with the string literal view name of the url in templates:

syntax --> {% url 'app_name:urlname' %}

app_name = "demo".   # right above url patterns in app
url_patterns = [
('login/', views.login, name = 'login')
]

<a href="{% url 'demo:login' %}".  # Use this in templatep

Note: use the app_name right above the url_patterns in urls.py file.

6πŸ‘

Fix urlpatterns in urls.py file

For example, my app name is β€œsimulator”,

My URL pattern for login and logout looks like

urlpatterns = [
    ...
    ...
    url(r'^login/$', simulator.views.login_view, name="login"),
    url(r'^logout/$', simulator.views.logout_view, name="logout"),
    ...
    ...

]
πŸ‘€Dartion

4πŸ‘

In my case, what I did was a mistake in the url tag in the respective template. So, in my url tag I had something like

{% url β€˜polls:details’ question.id %}

while in the views, I had written something like:

def details(request, question_id):
code here

So, the first thing you might wanna check is whether things are spelled as they shoould be. The next thing then you can do is as the people above have suggested.

πŸ‘€Varun Sharma

4πŸ‘

In my case, this error occurred because I forgot to add app_name along with url_name.
Below is my app urls.py

    app_name = "wikis"
    urlpatterns = [
        path("", views.index, name="index"),
        path("wiki/<str:name>", views.get_page, name="get_page"),
       ]

Below is my function’s return statement where I forgot to put app_name in reverse URL

    return HttpResponseRedirect(reverse("get_page", kwargs={'name':title}))

Correct code would be

    return HttpResponseRedirect(reverse("wikis:get_page", kwargs={'name':title}))
πŸ‘€Mitesh Patil

2πŸ‘

*Always make sure when you use HttpResponseRedirect and reverse, the name you specify inside reverse is the same name you gave to your path inside urls.py

Thats the problem i had and i found out through trial and error*

πŸ‘€Gesy Darati

2πŸ‘

I too faced the same issue while testing, for me it was caused when url was empty in html

<td><a href="{% url '' test.id %}"><i class="fa fa-times" aria-hidden="true"></i></a></td>

So after I changed it by putting the url name:

<td><a href="{% url 'task_delete' test.id %}"><i class="fa fa-times" aria-hidden="true"></i></a></td>
πŸ‘€Akshay

1πŸ‘

In my case, I don’t put namespace_name in the url tag ex: {% url 'url_name or pattern name' %}.
you have to specify the namespace_name like: {% url 'namespace_name:url_name or pattern name' %}.

Explanation: In project urls.py path('', include('blog.urls',namespace='blog')), and in app’s urls.py you have to specify the app_name. like app_name = 'blog'. namespace_name is the app_name.

1πŸ‘

You can also get this error if you forget to add the app url in the project url

Example:
Project/urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('app.urls')),
]

and you have a store/urls.py

so if you have html code in store/templates/store
and you want to add in app/templates/app an a tag with the url to an html code in store/templates/store

You would have to include the store/urls.py in Project/urls.py

Project/urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('app.urls')),
    path('', include('store.urls')),
]
πŸ‘€AnonymousUser

1πŸ‘

I’ve been reading this for past two days to compare mine to see why it didn’t work. it turns out a space between ":" matters:
mine had a space between ":" and "index":

<a href="{% url 'namespace: index' %}">Home</a>

thought this worth mentioning in case someone like me scratching their heads in the future:
No space around the colon, or anywhere before or after "namespace" and "index"

πŸ‘€lycheelichi

1πŸ‘

It is like that you have written wrong pattern of url in template file. Such that you write

instead {% url β€˜claim:cashless_opd_send_otp’ %}

0πŸ‘

If you dont define name in the path field, usually the error will come.
e.g.: path('crud/',ABC.as_view(),name="crud")

πŸ‘€aman sharma

0πŸ‘

Give the same name in urls.py

 path('detail/<int:id>', views.detail, name="detail"),

0πŸ‘

In my case, this error occurred due to a mismatched url name. e.g,

<form action="{% url 'test-view' %}" method="POST">

urls.py

path("test/", views.test, name='test-view'),
πŸ‘€shoaib21

0πŸ‘

*Always make sure when you use HttpResponseRedirect and reverse, the name you specify inside reverse is the same name you gave to your path inside urls.py

β€˜return HttpResponseRedirect(reverse("index"))
path("index/",views.index,name="index")’

Thats the problem i had and i found out through trial and error*

πŸ‘€Gesy Darati

0πŸ‘

I have faced the same problem. The mistake was I declared same name for multiple urlpatterns.

 path('file', views.sender, name='sender'),

Here the name should be different and unique for different url.

0πŸ‘

Let’s say in your template home.html you are having a form that does a POST request, like:

<form id="form_id" action = "{% url 'home' %}" method = "post" > .. </form>

In your urls.py you have

url(r'^$', views.home_view, name='home')

in your view, you can check the passed data from template like this.

def home_view(request): print(request.POST)

it is important in urls.py to declare a name=’home’ and on your action part on the form to include this url action = "{% url β€˜home’ %}"

πŸ‘€A.Ktns

0πŸ‘

The simple solution is

 path('detail/', views.detail, name="This_is_the_solution"),

you have to give the name value to the url,

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

0πŸ‘

In Some cases:
You should not forgot to load the home page or base page by using
eg:
{%extends "app_name/web_page.html"%>

πŸ‘€Batuel Moges

-1πŸ‘

The common error that I have found is when you forget to define
your URL in yourapp/urls.py.

πŸ‘€user3719458

-1πŸ‘

On line 10 there’s a space between s and t. It should be one word: stylesheet.

πŸ‘€Douglas T

-1πŸ‘

appname=demo
url=/student

href="{% url β€˜demo:student’ %}"

Make Sure you should not have space before or after : (colon)

πŸ‘€sreekanth

Leave a comment