jerryh91
jerryh91

Reputation: 1795

Page not found 404 on Django site?

I'm following the tutorial on Django's site to create a simple poll app. However, Django is unable to resolve "//127.0.0.1:8000/polls" , even though I've defined the regex in mySite/urls.py. I'm doing this in a virtualenv, with the latest Django (1.7) installed.

mySite/urls.py:

from django.conf.urls import patterns, include, url
from django.contrib import admin

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

mySite/polls/urls.py:

from django.conf.urls import patterns, url
from polls import views

urlpatterns = patterns('',
url(r'^$', views.index, name='index'), 
)

mySite/polls/views.py:

from django.shortcuts import render
from django.http import HttpResponse
def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

mySite/settings.py:

 ...
 INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls',
 ) 
  ....
 ROOT_URLCONF = 'mySite.urls'

The error I'm getting:

Using the URLconf defined in mySite.urls, Django tried these URL patterns, in this order: ^admin/  
The current URL, polls, didn't match any of these.

Upvotes: 36

Views: 57851

Answers (13)

jwndev
jwndev

Reputation: 51

To make the answer clear for beginners who has this issue by following the tutorial, the project root URLconf is the one in the same folder as settings.py which is:

 mysite/mysite/urls.py

Just make sure import 'include'. The code looks like:

from django.conf.urls import include, url
from django.contrib import admin

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

So in mysite/mysite/settings.py:

The line should be:

ROOT_URLCONF = 'mysite.urls'

You don't need create a fresh new root URLconf.

Upvotes: 5

Jowin John Chemban
Jowin John Chemban

Reputation: 91

Page not found?

If you get an error page here, check that you’re going to http://localhost:8000/polls/ and not http://localhost:8000/.

enter image description here

Source : https://docs.djangoproject.com/en/3.0/intro/tutorial01/

Upvotes: 1

Nishat Ahmed
Nishat Ahmed

Reputation: 1

i had the same issue and got it resolved by adding /polls after http://server:port/ and so final address in server looks like: http://server:port/polls

Upvotes: 0

Muhammad Yousaf
Muhammad Yousaf

Reputation: 11

Another way to access 127.0.0.1:8000/polls would be to redirect the browser when accessing 127.0.0.1:8000. It is done by editing .../mysite/mysite/urls.py as follows:

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

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

Upvotes: 1

user50619
user50619

Reputation: 353

2017-10-05_12:03 ~/mysite/mysite
$ vi urls.py 2017-10-05_12:04 ~/mysite/mysite
$ cd ../.. 2017-10-05_12:04 ~
$ mv mysite SENSIBLE_NAME_DJANGO_ROOT

Upvotes: 0

srilekha.bikki
srilekha.bikki

Reputation: 1

Add the below line in your Mysite/urls.py

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

and check. If you have created your project correctly, it should work. Else something like above might have happened to have more than one files so confused.

Upvotes: 0

Peter
Peter

Reputation: 1669

In my case, it was a stupid mistake. I wanted to integrate the plugin django-tinymce, and test it. So following this guide, I did the step 3 and exported the variable to the path. As the server runned again, I received the not found error, showing the message:

Using the URLconf defined in testtinymce.urls, Django tried these URL patterns, in this order: ....

But I didn't know what exactly it was, until I remembered exporting the variable DJANGO_SETTINGS_MODULE

running unset DJANGO_SETTINGS_MODULE in terminal solved my issue. Hope that it helps someone too.

Upvotes: 0

ZakJ
ZakJ

Reputation: 1410

I had the same problem.

It turns out I was confused because of the multiple directories named "mysite".

I wrongly created a urls.py file in the root "mysite" directory (which contains "manage.py"), then pasted in the code from the website.

To correct it I deleted this file, went into the mysite/mysite directory (which contains "settings.py"), modified the existing "urls.py" file, and replaced the code with the tutorial code.

In a nutshell, make sure your urls.py file is in the right directory.

Upvotes: 88

duyinhao
duyinhao

Reputation: 11

You put the urls.py folder into the outer MySite folder, you are suppose to put it in the inner one so its not mySite/urls.py, but mySite/mySite/urls.py:

ran into the same mistake when i did the tutorial

Upvotes: 1

Josephat Mwanzia
Josephat Mwanzia

Reputation: 1

Actually the problem is that you didn't notice that mysite/urls.py and polls/urls.py are two different files and you modified polls/urls.py instead of putting mysite/urls.py in the urls.py file in ...mysite\mysite folder.

Upvotes: 0

Raja Simon
Raja Simon

Reputation: 10315

Django unable to resolve 127.0.0.1:8000/polls because url config defined as r'^polls/'.

Usual workaround:

mySite/urls.py:

from django.conf.urls import patterns, include, url
from django.contrib import admin

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

Note: Whenever Django encounters include(), It chops off whatever part of the URL matched up to that point and sends the remaining string to the included URLconf for further processing.

mySite/polls/urls.py:

from django.conf.urls import patterns, url
from polls import views

urlpatterns = patterns('polls.views',
url(r'^$', 'index', name='index'), 
)

Note: Instead of typing that out for each entry in urlpatterns, you can use the first argument to the patterns() function to specify a prefix to apply to each view function.

Answer If

If you want to access 127.0.0.1:8000/polls Note: without trailing slash

use view based url

url(r'^polls', 'polls.views.index', name='index'),

So now you can access 127.0.0.1:8000/polls without trailing slash.

Upvotes: 9

pyjavo
pyjavo

Reputation: 1613

Depending on where you put your ROOT urls.py, you set your ROOT_URLCONFIG accordingly, if you have it in your outermost folder containing manage.py then "urls" is ok. if you have it in someother folder then you have to do ".urls"

Credit for the answer to jerryh91

For more info about how it works, check How Django processes a request

Upvotes: 1

Emily
Emily

Reputation: 316

You're accessing to http://yourdomain.com/, and you don't have any URL defined for "/".

You have two options:

  1. If you want to access to the index page of your polls application you have to enter the URL: yourdomain.com/polls

  2. You can also modify you mySite/urls.py file to access from just yourdomain.com

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

Upvotes: 5

Related Questions