Tirthraj Chauhan
Tirthraj Chauhan

Reputation: 11

getting error 404 in django framework python

I am newbie in django and I try to build webapp by using django framework to upload image and show on web page. After somehow solving many errors form urls.py finally server run but at last again Page not found (404) error on web page. i upload all necessary code below.

myproject/myproject/settings.py

import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
PROJECT_ROOT = os.path.realpath(os.path.dirname(__file__))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.6/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '2z$tk#wj&&pc(0ps4!7w_o_lm4h!3flwy+8%%s3k5pqars=ta&'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

TEMPLATE_DEBUG = True

ALLOWED_HOSTS = []


# Application definition

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',   )
MIDDLEWARE_CLASSES = (
    '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',
)

ROOT_URLCONF = 'myproject.urls'

WSGI_APPLICATION = 'myproject.wsgi.application'

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', # Add   'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
       'NAME': os.path.join(PROJECT_ROOT,   'database/database.sqlite3'),                          # Or path to   database file if using sqlite3.
       'USER': '',                      # Not used with sqlite3.
       'PASSWORD': '',                  # Not used with sqlite3.
       'HOST': '',                      # Set to empty string for     localhost. Not used with sqlite3.
       'PORT': '',                      # Set to empty string for       default. Not used with sqlite3.
    }
}

'''
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
'''

# Internationalization
# https://docs.djangoproject.com/en/1.6/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.6/howto/static-files/

STATIC_URL = '/static/'


# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/home2/media/media.lawrence.com/media/"
MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media')

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
#trailing slash.
# Examples: "http://media.lawrence.com/media/",    "http://example.com/media/"
MEDIA_URL = '/media/'

myproject/myapp/urls.py
from django.conf.urls import url
from . import views

urlpatterns = [

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

myproject/myapp/views.py

# -*- coding: utf-8 -*-
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse

from myapp.models import Document
from myapp.forms import DocumentForm

def list(request):
    # Handle file upload
    if request.method == 'POST':
    form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
        newdoc = Document(docfile = request.FILES['docfile'])
        newdoc.save()

        # Redirect to the document list after POST
        return HttpResponseRedirect(reverse('list'))
    else:
        form = DocumentForm() # A empty, unbound form

        #Load documents for the list page
        documents = Document.objects.all()

        #Render list page with the documents and the form
        return render_to_response(
       'myapp/list.html',
       {'documents': documents, 'form': form},
       context_instance=RequestContext(request)
       )

 def index(request):
     return render_to_response('myapp/index.html')

myproject/myproject/urls.py

from django.conf.urls import include, url
from django.conf import settings
from django.conf.urls.static import static
from django.views.generic import RedirectView
from django.contrib import admin
# admin.autodiscover()

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

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

myproject/myapp/urls.py

from django.conf.urls import url
from . import views

urlpatterns = [

    # url(r'^$', views.list, name='list'),
    url(r'^$', views.index, name='index'),
    url(r'^list/$', views.list, name='list'),
]

terminal screenshot

updated error

Upvotes: 0

Views: 1031

Answers (1)

Jens Astrup
Jens Astrup

Reputation: 2454

Your URLs are currently set up for:

127.0.0.1:8000/myapp/
127.0.0.1:8000/myapp/list/
127.0.0.1:8000/admin

127.0.0.1:8000/ doesn't have a URL set up - based on this SO answer you can create an index page like so:

from django.views.generic.base import TemplateView

    urlpatterns = [
            url(r'^myapp/', include('myapp.urls')),
            url(r'^admin/', include(admin.site.urls)),
            url(r'^$', TemplateView.as_view(template_name='myapp/index.html'),
            name='home'),
    ]

or just direct your browser to one of those URLs first listed.

Update: Looks like you're also missing your Templates settings, add the following to your settings.py if it's not currently there.

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

Django URLs can be a bit tricky to get the hang of - you may want to read the documentation on them

Upvotes: 1

Related Questions