{"id":5545,"date":"2022-11-15T02:11:59","date_gmt":"2022-11-15T02:11:59","guid":{"rendered":"https:\/\/www.pythontutorial.net\/?page_id=5545"},"modified":"2023-11-01T00:21:21","modified_gmt":"2023-11-01T00:21:21","slug":"django-create-app","status":"publish","type":"page","link":"https:\/\/www.pythontutorial.net\/django-tutorial\/django-create-app\/","title":{"rendered":"Django Create App"},"content":{"rendered":"\n<p><strong>Summary<\/strong>: in this tutorial, you&#8217;ll learn how to create a new application in a Django project, how to define views, and map the views with URLs.<\/p>\n\n\n\n<p class=\"note\">This tutorial begins where\u00a0the <a href=\"https:\/\/www.pythontutorial.net\/django-tutorial\/getting-started-with-django\/\">Getting Started with Django tutorial<\/a> left off.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id='django-projects-and-applications'>Django projects and applications <a href=\"#django-projects-and-applications\" class=\"anchor\" id=\"django-projects-and-applications\" title=\"Anchor for Django projects and applications\">#<\/a><\/h2>\n\n\n\n<p>In the Django framework: <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A project is a Django installation with some settings. <\/li>\n\n\n\n<li>An application is a group of models, views, templates, and URLs. <\/li>\n<\/ul>\n\n\n\n<p>A Django project may have one or more applications. For example, a project is like a website that may consist of several applications such as blogs, users, and wikis. <\/p>\n\n\n\n<p>Typically, you design a Django application that can be reusable in other Django projects. The following picture shows the structure of a Django project and its applications:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2022\/11\/django-project-and-apps.svg\" alt=\"\" class=\"wp-image-5548\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id='creating-a-blog-application'>Creating a blog application <a href=\"#creating-a-blog-application\" class=\"anchor\" id=\"creating-a-blog-application\" title=\"Anchor for Creating a blog application\">#<\/a><\/h2>\n\n\n\n<p>To create an application, you use the <code>startapp<\/code> command as follows:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">python<\/span> <span class=\"hljs-selector-tag\">manage<\/span><span class=\"hljs-selector-class\">.py<\/span> <span class=\"hljs-selector-tag\">startapp<\/span> <span class=\"hljs-selector-tag\">app_name<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>For example, you can create an application called <code>blog<\/code> using the <code>startapp<\/code> command like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">python<\/span> <span class=\"hljs-selector-tag\">manage<\/span><span class=\"hljs-selector-class\">.py<\/span> <span class=\"hljs-selector-tag\">startapp<\/span> <span class=\"hljs-selector-tag\">blog<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The command creates a <code>blog<\/code> directory with some files:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"plaintext\" data-shcb-language-slug=\"plaintext\"><span><code class=\"hljs language-plaintext\">\u251c\u2500\u2500 blog\n|  \u251c\u2500\u2500 admin.py\n|  \u251c\u2500\u2500 apps.py\n|  \u251c\u2500\u2500 migrations\n|  \u251c\u2500\u2500 models.py\n|  \u251c\u2500\u2500 tests.py\n|  \u251c\u2500\u2500 views.py\n|  \u2514\u2500\u2500 __init__.py\n\u251c\u2500\u2500 db.sqlite3\n\u251c\u2500\u2500 django_project\n|  \u251c\u2500\u2500 asgi.py\n|  \u251c\u2500\u2500 settings.py\n|  \u251c\u2500\u2500 urls.py\n|  \u251c\u2500\u2500 wsgi.py\n|  \u251c\u2500\u2500 __init__.py\n|  \u2514\u2500\u2500 __pycache__\n\u2514\u2500\u2500 manage.py<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">plaintext<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">plaintext<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\" id='registering-an-application'>Registering an application <a href=\"#registering-an-application\" class=\"anchor\" id=\"registering-an-application\" title=\"Anchor for Registering an application\">#<\/a><\/h2>\n\n\n\n<p>After creating an application, you need to register it to the project especially when the application uses <a href=\"https:\/\/www.pythontutorial.net\/django-tutorial\/django-templates\/\">templates<\/a> and interacts with a database.<\/p>\n\n\n\n<p>The <code>blog<\/code> app has the <code>apps.py<\/code> module which contains the <code>BlogConfig<\/code> class like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-keyword\">from<\/span> django.apps <span class=\"hljs-keyword\">import<\/span> AppConfig\n\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">BlogConfig<\/span><span class=\"hljs-params\">(AppConfig)<\/span>:<\/span>\n    default_auto_field = <span class=\"hljs-string\">'django.db.models.BigAutoField'<\/span>\n    name = <span class=\"hljs-string\">'blog'<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>To register the <code>blog<\/code> app, you add the <code>blog.apps.BlogConfig<\/code> class to the <code>INSTALLED_APPS<\/code> list in the <code>settings.py<\/code> of the project:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python shcb-code-table\"><span class='shcb-loc'><span>INSTALLED_APPS = &#91;\n<\/span><\/span><span class='shcb-loc'><span>     <span class=\"hljs-comment\"># ...<\/span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-string\">'blog.apps.BlogConfig'<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>]\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Alternatively, you can use the app name like <code>blog<\/code> in the <code>INSTALLED_APPS<\/code> list like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">INSTALLED_APPS = &#91;\n     <span class=\"hljs-comment\"># ...<\/span>\n    <span class=\"hljs-string\">'blog'<\/span>,\n]<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\" id='creating-a-view'>Creating a view <a href=\"#creating-a-view\" class=\"anchor\" id=\"creating-a-view\" title=\"Anchor for Creating a view\">#<\/a><\/h2>\n\n\n\n<p>The <code>views.py<\/code> file in the <code>blog<\/code> directory comes with the following default code:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-keyword\">from<\/span> django.shortcuts <span class=\"hljs-keyword\">import<\/span> render\n\n<span class=\"hljs-comment\"># Create your views here.<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The views.py will contain all the views of the application. A view is a function that takes an <code>HttpRequest<\/code> object and returns an <code>HttpResponse<\/code> object. It&#8217;s equivalent to the controller in the MVC architecture.<\/p>\n\n\n\n<p>To create a new view, you import the <code>HttpResponse<\/code> from the <code>django.http<\/code> into the <code>views.py<\/code> file and <a href=\"https:\/\/www.pythontutorial.net\/python-basics\/python-functions\/\">define a new function<\/a> that accepts an instance of the <code>HttpRequest<\/code> class:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-keyword\">from<\/span> django.shortcuts <span class=\"hljs-keyword\">import<\/span> render\n<span class=\"hljs-keyword\">from<\/span> django.http <span class=\"hljs-keyword\">import<\/span> HttpResponse\n\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">home<\/span><span class=\"hljs-params\">(request)<\/span>:<\/span>\n    <span class=\"hljs-keyword\">return<\/span> HttpResponse(<span class=\"hljs-string\">'&lt;h1&gt;Blog Home&lt;\/h1&gt;'<\/span>)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In this example, the <code>home()<\/code> function returns a new <code>HttpResponse<\/code> object that contains a piece of HTML code. The HTML code includes an <code>h1<\/code> tag.<\/p>\n\n\n\n<p>The <code>home()<\/code> function accepts an instance of an <code>HttpRequest<\/code> object and returns an <code>HttpResponse<\/code> object. It is called a function-based view. Later, you&#8217;ll learn how to create class-based views.<\/p>\n\n\n\n<p>To map a URL with the <code>home()<\/code> function, you create a new file <code>urls.py<\/code> inside the <code>blog<\/code> directory and add the following code to the <code>urls.py<\/code> file:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-keyword\">from<\/span> django.urls <span class=\"hljs-keyword\">import<\/span> path\n<span class=\"hljs-keyword\">from<\/span> . <span class=\"hljs-keyword\">import<\/span> views\n\nurlpatterns = &#91;\n    path(<span class=\"hljs-string\">''<\/span>, views.home, name=<span class=\"hljs-string\">'posts'<\/span>),\n]\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>How it works.<\/p>\n\n\n\n<p>First, import the <code>path<\/code> from <code>django.urls<\/code> module:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-keyword\">from<\/span> django.urls <span class=\"hljs-keyword\">import<\/span> path<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Second, import the <code>views.py<\/code> module from the current directory.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-keyword\">from<\/span> . <span class=\"hljs-keyword\">import<\/span> views<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"note\">Note that this is a relative import that imports the <code>views<\/code> module from the current directory.<\/p>\n\n\n\n<p>Third, define a route that maps the blog URL with the <code>home()<\/code> function using the <code>path()<\/code> function.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python shcb-code-table\"><span class='shcb-loc'><span>urlpatterns = &#91;\n<\/span><\/span><mark class='shcb-loc'><span>    path(<span class=\"hljs-string\">''<\/span>, views.home, name=<span class=\"hljs-string\">'posts'<\/span>),\n<\/span><\/mark><span class='shcb-loc'><span>]\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The <code>name<\/code> keyword argument defines the name of the route. Later, you can reference the URL using the route name instead of the hard-code URL like <code>blog\/<\/code>. <\/p>\n\n\n\n<p>By using the name for the path, you can change the URL of the path to something else like <code>my-blog\/<\/code> in the <code>urls.py<\/code> instead of changing the hard-coded URL everywhere.<\/p>\n\n\n\n<p>Note that the final argument of the path must be a keyword argument like <code>name='posts'<\/code>. If you use a positional argument like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python shcb-code-table\"><span class='shcb-loc'><span><span class=\"hljs-keyword\">from<\/span> django.urls <span class=\"hljs-keyword\">import<\/span> path\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">from<\/span> . <span class=\"hljs-keyword\">import<\/span> views\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>urlpatterns = &#91;\n<\/span><\/span><mark class='shcb-loc'><span>    path(<span class=\"hljs-string\">''<\/span>, views.home, <span class=\"hljs-string\">'posts'<\/span>), <span class=\"hljs-comment\"># Error<\/span>\n<\/span><\/mark><span class='shcb-loc'><span>]\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>you&#8217;ll get the following error:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"plaintext\" data-shcb-language-slug=\"plaintext\"><span><code class=\"hljs language-plaintext\">TypeError: kwargs argument must be a dict, but got str.<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">plaintext<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">plaintext<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>To make the blog&#8217;s routes work, you need to include the <code>urls.py<\/code> of the <code>blog<\/code> application in the <code>urls.py<\/code> file of the Django project:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-15\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python shcb-code-table\"><span class='shcb-loc'><span><span class=\"hljs-keyword\">from<\/span> django.contrib <span class=\"hljs-keyword\">import<\/span> admin\n<\/span><\/span><mark class='shcb-loc'><span><span class=\"hljs-keyword\">from<\/span> django.urls <span class=\"hljs-keyword\">import<\/span> path, include <span class=\"hljs-comment\"># new<\/span>\n<\/span><\/mark><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>urlpatterns = &#91;\n<\/span><\/span><span class='shcb-loc'><span>    path(<span class=\"hljs-string\">'admin\/'<\/span>, admin.site.urls),\n<\/span><\/span><mark class='shcb-loc'><span>    path(<span class=\"hljs-string\">'blog\/'<\/span>, include(<span class=\"hljs-string\">'blog.urls'<\/span>)), <span class=\"hljs-comment\"># new<\/span>\n<\/span><\/mark><span class='shcb-loc'><span>]\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-15\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In the <code>urls.py<\/code> of the project, we import the <code>include<\/code> function from the <code>django.urls<\/code> and map the path of the blog to the <code>blog.urls<\/code>.<\/p>\n\n\n\n<p>By doing this, when you navigate to <code>http:\/\/127.0.0.1:8000\/blog\/<\/code>, Django will run the <code>home()<\/code> function of the <code>views.py<\/code> module and returns a webpage that displays a <code>h1<\/code> tag.<\/p>\n\n\n\n<p>Before opening the URL, you need to start the Django development web server:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-16\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">python manage.py runserver<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-16\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>When you navigate to <code>http:\/\/127.0.0.1:8000\/blog\/<\/code>, you&#8217;ll see a webpage that displays the <code>Blog Home<\/code> heading.<\/p>\n\n\n\n<p>Here&#8217;s the flow:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>First, the web browser sends an HTTP request to the URL <code>http:\/\/127.0.0.1:8000\/blog\/<\/code><\/li>\n\n\n\n<li>Second, Django executes the <code>urls.py<\/code> in the <code>django_project<\/code> directory. It matches the <code>blog\/<\/code> with the URL in the <code>urlpatterns<\/code> list in the <code>urls.py<\/code>. As a result, it sends <code>''<\/code> to the <code>urls.py<\/code> of the <code>blog<\/code> app.<\/li>\n\n\n\n<li>Third, Django runs the <code>urls.py<\/code> file in the <code>blog<\/code> application. It matches the <code>''<\/code> URL with the <code>views.home<\/code> function and execute it, which returns an HTTP response that outputs a <code>h1<\/code> tag.<\/li>\n\n\n\n<li>Finally, Django returns a webpage to the web browser.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id='adding-more-routes'>Adding more routes <a href=\"#adding-more-routes\" class=\"anchor\" id=\"adding-more-routes\" title=\"Anchor for Adding more routes\">#<\/a><\/h2>\n\n\n\n<p>First, define the <code>about()<\/code> function in the <code>views.py<\/code> of the <code>blog<\/code> application:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-17\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python shcb-code-table\"><span class='shcb-loc'><span><span class=\"hljs-keyword\">from<\/span> django.shortcuts <span class=\"hljs-keyword\">import<\/span> render\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">from<\/span> django.http <span class=\"hljs-keyword\">import<\/span> HttpResponse\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">home<\/span><span class=\"hljs-params\">(request)<\/span>:<\/span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">return<\/span> HttpResponse(<span class=\"hljs-string\">'&lt;h1&gt;Blog Home&lt;\/h1&gt;'<\/span>)\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><mark class='shcb-loc'><span><span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">about<\/span><span class=\"hljs-params\">(request)<\/span>:<\/span>\n<\/span><\/mark><mark class='shcb-loc'><span>    <span class=\"hljs-keyword\">return<\/span> HttpResponse(<span class=\"hljs-string\">'&lt;h1&gt;About&lt;\/h1&gt;'<\/span>)\n<\/span><\/mark><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-17\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Second, add a route to the <code>urls.py<\/code> file:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-18\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python shcb-code-table\"><span class='shcb-loc'><span><span class=\"hljs-keyword\">from<\/span> django.urls <span class=\"hljs-keyword\">import<\/span> path\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">from<\/span> . <span class=\"hljs-keyword\">import<\/span> views\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>urlpatterns = &#91;\n<\/span><\/span><span class='shcb-loc'><span>    path(<span class=\"hljs-string\">''<\/span>, views.home, name=<span class=\"hljs-string\">'posts'<\/span>),\n<\/span><\/span><mark class='shcb-loc'><span>    path(<span class=\"hljs-string\">'about\/'<\/span>, views.about, name=<span class=\"hljs-string\">'about'<\/span>),\n<\/span><\/mark><span class='shcb-loc'><span>]\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-18\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Third, open the URL <code>http:\/\/127.0.0.1:8000\/blog\/about\/<\/code>, and you&#8217;ll see a page that displays the About page.<\/p>\n\n\n\n<p>Now, if you open the home URL, you&#8217;ll see a page that displays a page not found with a 404 HTTP status code. <\/p>\n\n\n\n<p>The reason is that the <code>urls.py<\/code> in the <code>django_project<\/code> doesn&#8217;t have any route that maps the home URL with a view.<\/p>\n\n\n\n<p>To make the blog application the homepage, you can change the route from <code>blog\/<\/code> to <code>''<\/code> as follows:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-19\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python shcb-code-table\"><span class='shcb-loc'><span><span class=\"hljs-keyword\">from<\/span> django.contrib <span class=\"hljs-keyword\">import<\/span> admin\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">from<\/span> django.urls <span class=\"hljs-keyword\">import<\/span> path, include\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>urlpatterns = &#91;\n<\/span><\/span><span class='shcb-loc'><span>    path(<span class=\"hljs-string\">'admin\/'<\/span>, admin.site.urls),\n<\/span><\/span><mark class='shcb-loc'><span>    path(<span class=\"hljs-string\">''<\/span>, include(<span class=\"hljs-string\">'blog.urls'<\/span>)),\n<\/span><\/mark><span class='shcb-loc'><span>]\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-19\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>If you open the URL <code>http:\/\/127.0.0.1:8000<\/code>, you&#8217;ll see the blog home page. And navigating to the URL <code>http:\/\/127.0.0.1:8000\/about\/<\/code> will take you to the About page.<\/p>\n\n\n\n<p class=\"note\"><a href=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2023\/01\/django_project_2.zip\" target=\"_blank\" rel=\"noreferrer noopener\">Download the Django Project source code<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id='summary'>Summary <a href=\"#summary\" class=\"anchor\" id=\"summary\" title=\"Anchor for Summary\">#<\/a><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A Django project contains one or more applications.<\/li>\n\n\n\n<li>A Django application is a group of models, views, templates, and URLs.<\/li>\n\n\n\n<li>Use <code>python manage.py startapp app_name<\/code> command to create a new Django application.<\/li>\n\n\n\n<li>Define a function in the <code>views.py<\/code> file to create a function-based view.<\/li>\n\n\n\n<li>Define a route in the <code>urls.py<\/code> file of the application to map a URL pattern with a view function.<\/li>\n\n\n\n<li>Use the <code>include()<\/code> function to include the <code>urls.py<\/code> of app in the <code>urls.py<\/code> of the project.<\/li>\n<\/ul>\n<div class=\"helpful-block-content\" data-title=\"\">\n\t<header>\n\t\t<div class=\"wth-question\">Was this tutorial helpful ?<\/div>\n\t\t<div class=\"wth-thumbs\">\n\t\t\t<button\n\t\t\t\tdata-post=\"5545\"\n\t\t\t\tdata-post-url=\"https:\/\/www.pythontutorial.net\/django-tutorial\/django-create-app\/\"\n\t\t\t\tdata-post-title=\"Django Create App\"\n\t\t\t\tdata-response=\"1\"\n\t\t\t\tclass=\"wth-btn-rounded wth-yes-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\tclass=\"feather feather-thumbs-up block w-full h-full\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> Yes <\/span>\n\t\t\t<\/button>\n\n\t\t\t<button\n\t\t\t\tdata-response=\"0\"\n\t\t\t\tdata-post=\"5545\"\n\t\t\t\tdata-post-url=\"https:\/\/www.pythontutorial.net\/django-tutorial\/django-create-app\/\"\n\t\t\t\tdata-post-title=\"Django Create App\"\n\t\t\t\tclass=\"wth-btn-rounded wth-no-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> No <\/span>\n\t\t\t<\/button>\n\t\t<\/div>\n\t<\/header>\n\n\t<div class=\"wth-form hidden\">\n\t\t<div class=\"wth-form-wrapper\">\n\t\t\t<div class=\"wth-title\"><\/div>\n\t\t\t<textarea class=\"wth-message\"><\/textarea>\n\t\t\t<input type=\"button\" name=\"wth-submit\" class=\"wth-btn wth-btn-submit\" id=\"wth-submit\" \/>\n\t\t\t<input type=\"button\" class=\"wth-btn wth-btn-cancel\" value=\"Cancel\" \/>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>In this tutorial, you&#8217;ll learn how to create a new app in a Django project.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":5531,"menu_order":1,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-5545","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages\/5545","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/comments?post=5545"}],"version-history":[{"count":0,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages\/5545\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages\/5531"}],"wp:attachment":[{"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/media?parent=5545"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}