This post is in continuation with our previous post “Starting webserver using your first simple Django project” , where we showed how we can start the webserver. Now, as we have the webserver running, lets see how we can start an application which will serve the custom built usecase over this webserver.
$ cd django_container
Your apps can live anywhere on your Python path. In this post, we’ll create our helloworld app in the same directory as your
manage.py file so that it can be imported as its own top-level module, rather than a submodule of project.
$ python manage.py startapp my_helloworld_django_app
As we created the app, we can see it got created beside our project “my_django_project” in same directory “django_container”
$ ls db.sqlite3 env manage.py my_django_project my_helloworld_django_app
$ tree my_helloworld_django_app/ my_helloworld_django_app/ ├── admin.py ├── apps.py ├── __init__.py ├── migrations │ └── __init__.py ├── models.py ├── tests.py └── views.py
As we start writing our first application, the first thing we need to do is to design how we want to show it to the end user, this design needs to be done in our applications views. ( i.e. my_helloworld_django_app/views.py in this example )
Write the app views
$ vim my_helloworld_django_app/views.py[bash] from django.http import HttpResponse def index(request): return HttpResponse("Hello, world from Django First App!") [/bash]
here, in our first django app, we intend to just show some string “Hello, world from Django First App” as http response when someone visits url in the server. i.e. it will be a http request.
Link the app views to app urls
Now, we need to link the views we created for the app to the app’s urls, so that the urls gets redirected to appropriate views. In our example, app’s url file is “my_helloworld_django_app/urls.py” . Since this file was not created by default for app, we need to create it,
$ vim my_helloworld_django_app/urls.py[bash] from django.urls import path from . import views urlpatterns = [ path(”, views.index, name=’index’), ] [/bash]
As we can see above “from . import views” using this line, we imported the views i.e. view.py from the current directory i.e. app directory. and using the line “path(”, views.index, name=’index’)” we mapped this url to views index function.
path() function is passed four arguments, two required:
view, and two optional:
name. At this point, it’s worth reviewing what these arguments are for.
route is a string that contains a URL pattern. When processing a request, Django starts at the first pattern in
urlpatterns and makes its way down the list, comparing the requested URL against each pattern until it finds one that matches.
Patterns don’t search GET and POST parameters, or the domain name. For example, in a request to
https://www.example.com/myapp/, the URLconf will look for
myapp/. In a request to
https://www.example.com/myapp/?page=3, the URLconf will also look for
When Django finds a matching pattern, it calls the specified view function with an
HttpRequest object as the first argument and any “captured” values from the route as keyword arguments. We’ll give an example of this in a bit.
Mapping project urls to App urls
Now, we are ready to map the projects urls to the app’s url. So that when ever the user visits the url, which is directly linked to project’s url, internally its goes on to refer app’s urls and then present the views mapped to app’s url.
$ vim my_django_project/urls.py[bash] from django.urls import include, path urlpatterns = [ path(‘helloworld/’, include(‘my_helloworld_django_app.urls’)), ] [/bash]
Here, we mapped, the “helloworld” url i.e. http://127.0.0.1:8000/helloworld to “my_helloworld_django_app” app’s “urls.py” using below line,
$ python manage.py runserver
Now, if you visit the url http://127.0.0.1:8000/helloworld , you should see the web page with message as “Hello, world from Django First App!”