user7080065
user7080065

Reputation: 115

Django urls -Reverse for 'url name' not found

I have a Django application called polls. I'm trying to use a form in a template that it's action is calling to another url. mysite/urls.py:

from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
    url(r'^$', include('polls.urls')),
    url(r'^admin/', admin.site.urls),
]

polls/urls.py:

from django.conf.urls import url
from . import views
app_name = 'polls'
urlpatterns = [
    url(r'^$', views.call_login, name='call_login'),
    url(r'^homepage/$', views.login, name='login'),
]

login.html:

<form name="form" method="post" action="{% url 'login' %}" >
    {% csrf_token %}
    <input type="text" placeholder="username" name="user"><br>
    <input type="password" placeholder="password" name="password"><br>
    <input type="submit" value="Login" />
</form>

The error I got: NoReverseMatch:

Reverse for 'login' not found. 'login' is not a valid view function or pattern name.

Any idea why?

Upvotes: 0

Views: 1479

Answers (1)

Exprator
Exprator

Reputation: 27523

change your main url pattern

from

urlpatterns = [
    url(r'^$', include('polls.urls')),
    url(r'^admin/', admin.site.urls),
]

to this

urlpatterns = [
    url(r'^', include('polls.urls')),
    url(r'^admin/', admin.site.urls),
]

and template form

<form name="form" method="post" action="{% url 'polls:login' %}" >
    {% csrf_token %}
    <input type="text" placeholder="username" name="user"><br>
    <input type="password" placeholder="password" name="password"><br>
    <input type="submit" value="Login" />
</form>

Upvotes: 1

Related Questions