

{"id":100199,"date":"2021-08-07T09:00:45","date_gmt":"2021-08-07T03:30:45","guid":{"rendered":"https:\/\/data-flair.training\/blogs\/?p=100199"},"modified":"2026-06-01T12:42:18","modified_gmt":"2026-06-01T07:12:18","slug":"django-blog-application-project","status":"publish","type":"post","link":"https:\/\/data-flair.training\/blogs\/django-blog-application-project\/","title":{"rendered":"Create a Blog Application with Python Django"},"content":{"rendered":"<div class='__iawmlf-post-loop-links' style='display:none;' data-iawmlf-post-links='[{&quot;id&quot;:2552,&quot;href&quot;:&quot;https:\\\/\\\/drive.google.com\\\/file\\\/d\\\/1zxXravXi_I64sjXjR0jMUrQ41WXk8cnJ\\\/view?usp=drive_link&quot;,&quot;archived_href&quot;:&quot;http:\\\/\\\/web-wp.archive.org\\\/web\\\/20260601071312\\\/https:\\\/\\\/drive.google.com\\\/file\\\/d\\\/1zxXravXi_I64sjXjR0jMUrQ41WXk8cnJ\\\/view?usp=drive_link&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-06-02 07:00:56&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-06-07 15:53:52&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-06-12 05:11:34&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-06-12 05:11:34&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;}]'><\/div>\n<p>Let us develop a Blog Application using Django and let others post beautiful blogs on it. Here the users will also be able to post comments on any blog. This is a very useful and popular project in Django.<\/p>\n<h3>About the Blog Application:<\/h3>\n<p>A blog is basically an informational or discussion website. Logged in users can post blogs on any subject or topic that they find interesting so that everyone could see it.<\/p>\n<h3>Django Blog Application Project:<\/h3>\n<p>The objective of the project is to implement a blog web-based application where the users will post useful and informative blogs. Basic knowledge of the front-end part and a good knowledge of Django is required to complete and understand the project.<\/p>\n<h3>Django Blog Project Prerequisites<\/h3>\n<p>This project requires a good knowledge of programming both in front-end and back-end.<\/p>\n<h3>Download Blog Application Django Code<\/h3>\n<p>Please download the source code of python django blog app from the following link: <a href=\"https:\/\/drive.google.com\/file\/d\/1zxXravXi_I64sjXjR0jMUrQ41WXk8cnJ\/view?usp=drive_link\"><strong>Blog Python Django Project<\/strong><\/a><\/p>\n<h3>Project File Structure<\/h3>\n<p>First, let\u2019s check the steps to build the Blog Application in Python Django Framework:<\/p>\n<p>1. First of all, we start a project in Django with an app inside it.<br \/>\n2. Then create the required folders for templates, static files (images, javascript and css files) and media (images uploaded through backend)<br \/>\n3. Finally, creating the required urls and views.<\/p>\n<p>Let\u2019s start.<\/p>\n<h4>1. First of all we create a base.html file in templates folder which will contain the basic design that is required on all pages that is the navigation bar. Then we can extend this file on all the html pages :<\/h4>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;nav class=\"navbar navbar-expand-lg navbar-dark bg-dark\"&gt;\r\n       &lt;div class=\"container-fluid\"&gt;\r\n         &lt;a class=\"navbar-brand\" href=\"#\"&gt;DataFlair Blogs&lt;\/a&gt;\r\n         &lt;button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarSupportedContent\" aria-controls=\"navbarSupportedContent\" aria-expanded=\"false\" aria-label=\"Toggle navigation\"&gt;\r\n           &lt;span class=\"navbar-toggler-icon\"&gt;&lt;\/span&gt;\r\n         &lt;\/button&gt;\r\n         &lt;div class=\"collapse navbar-collapse\" id=\"navbarSupportedContent\"&gt;\r\n         &lt;div class=\"container mx-3\"&gt;\r\n           &lt;ul class=\"navbar-nav me-auto mb-2 mb-lg-0\"&gt;\r\n             &lt;li class=\"nav-item\"&gt;\r\n               &lt;a class=\"nav-link {% block homeactive %} {% endblock homeactive %}\" aria-current=\"page\" href=\"\/\"&gt;Home&lt;\/a&gt;\r\n             &lt;\/li&gt;\r\n             {% if user.is_authenticated %}\r\n             &lt;li class=\"nav-item\"&gt;\r\n               &lt;a class=\"nav-link {% block add_blogs_active %} {% endblock add_blogs_active %}\" href=\"\/add_blogs\/\"&gt;Add Blogs&lt;\/a&gt;\r\n             &lt;\/li&gt;\r\n             &lt;li class=\"nav-item\"&gt;\r\n               &lt;a class=\"nav-link active\" href=\"#\"&gt;Hello {{request.user}}&lt;\/a&gt;\r\n             &lt;\/li&gt;\r\n             &lt;li class=\"nav-item\"&gt;\r\n               &lt;a class=\"nav-link {% block profileactive %} {% endblock profileactive %}\" href=\"\/profile\/\"&gt;Profile&lt;\/a&gt;\r\n             &lt;\/li&gt;\r\n             &lt;li class=\"nav-item\"&gt;\r\n               &lt;a class=\"nav-link\" href=\"\/logout\/\"&gt;Logout&lt;\/a&gt;\r\n             &lt;\/li&gt;\r\n             {% else %}\r\n             &lt;li class=\"nav-item\"&gt;\r\n               &lt;a class=\"nav-link {% block registeractive %} {% endblock registeractive %}\" href=\"\/register\/\"&gt;Register&lt;\/a&gt;\r\n             &lt;\/li&gt;\r\n              &lt;li class=\"nav-item\"&gt;\r\n               &lt;a class=\"nav-link {% block loginactive %} {% endblock loginactive %}\" href=\"\/login\/\"&gt;Login&lt;\/a&gt;\r\n             &lt;\/li&gt;\r\n             {% endif %}\r\n           &lt;\/ul&gt;\r\n           &lt;\/div&gt;\r\n           &lt;form class=\"d-flex\"&gt;\r\n             &lt;input class=\"form-control me-2\" type=\"search\" placeholder=\"Search\" aria-label=\"Search\"&gt;\r\n             &lt;button class=\"btn btn-outline-success\" type=\"submit\"&gt;Search&lt;\/button&gt;\r\n           &lt;\/form&gt;\r\n         &lt;\/div&gt;\r\n       &lt;\/div&gt;\r\n     &lt;\/nav&gt;\r\n<\/pre>\n<p><strong>Code Explanation:<\/strong><\/p>\n<p>The above code is for the navigation bar which would be in use on all the html pages of the project. If the user is not logged in then the user will be getting the options of register and login whereas if the user is logged in then the user can see the options of add blogs, profile and logout.<\/p>\n<p><strong>Models.py<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">from django.db import models\r\nfrom django.contrib.auth.models import User\r\nfrom django.urls import reverse\r\nfrom django.utils.timezone import now\r\n \r\n    \r\nclass Profile(models.Model):\r\n    user = models.OneToOneField(User, on_delete=models.CASCADE, blank=True, null=True)\r\n    image = models.ImageField(upload_to=\"profile_pics\", blank=True, null=True)\r\n    bio = models.TextField(blank=True, null=True)\r\n    facebook = models.CharField(max_length=300, blank=True, null=True)\r\n    instagram = models.CharField(max_length=300, blank=True, null=True)\r\n    linkedin = models.CharField(max_length=300, blank=True, null=True)\r\n    \r\n    def __str__(self):\r\n        return str(self.user)\r\n \r\nclass BlogPost(models.Model):\r\n    title=models.CharField(max_length=255)\r\n    author= models.ForeignKey(User, on_delete=models.CASCADE)\r\n    slug=models.CharField(max_length=130)\r\n    content=models.TextField()\r\n    image = models.ImageField(upload_to=\"profile_pics\", blank=True, null=True)\r\n    dateTime=models.DateTimeField(auto_now_add=True)\r\n    \r\n    def __str__(self):\r\n        return str(self.author) +  \" Blog Title: \" + self.title\r\n    \r\n    def get_absolute_url(self):\r\n        return reverse('blogs')\r\n    \r\nclass Comment(models.Model):\r\n    user = models.ForeignKey(User, on_delete=models.CASCADE)\r\n    content = models.TextField()\r\n    blog = models.ForeignKey(BlogPost, on_delete=models.CASCADE)\r\n    parent_comment = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True)   \r\n    dateTime=models.DateTimeField(default=now)\r\n \r\n    def __str__(self):\r\n        return self.user.username +  \" Comment: \" + self.content\r\n<\/pre>\n<h4>2. Then we create the user registration page (register.html):<\/h4>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;form action=\"\/register\/\" method=\"POST\"&gt; {% csrf_token %}\r\n    &lt;div class=\"container mt-5\"&gt;\r\n        &lt;div class=\"mb-3\"&gt;\r\n            &lt;label for=\"username\" class=\"form-label\"&gt;Username&lt;\/label&gt;\r\n            &lt;input type=\"text\" class=\"form-control\" id=\"username\" name=\"username\"&gt;\r\n        &lt;\/div&gt;\r\n        &lt;div class=\"mb-3\"&gt;\r\n            &lt;label for=\"first_nam\" class=\"form-label\"&gt;First Name&lt;\/label&gt;\r\n            &lt;input type=\"text\" class=\"form-control\" id=\"first_name\" name=\"first_name\"&gt;\r\n        &lt;\/div&gt;\r\n        &lt;div class=\"mb-3\"&gt;\r\n            &lt;label for=\"last_name\" class=\"form-label\"&gt;Last Name&lt;\/label&gt;\r\n            &lt;input type=\"text\" class=\"form-control\" id=\"last_name\" name=\"last_name\"&gt;\r\n        &lt;\/div&gt;\r\n        &lt;div class=\"mb-3\"&gt;\r\n            &lt;label for=\"email\" class=\"form-label\"&gt;Email address&lt;\/label&gt;\r\n            &lt;input type=\"email\" class=\"form-control\" id=\"email\" name=\"email\"&gt;\r\n        &lt;\/div&gt;\r\n        &lt;div class=\"mb-3\"&gt;\r\n            &lt;label for=\"password1\" class=\"form-label\"&gt;Password&lt;\/label&gt;\r\n            &lt;input type=\"password\" class=\"form-control\" id=\"password1\" name=\"password1\"&gt;\r\n        &lt;\/div&gt;\r\n        &lt;div class=\"mb-3\"&gt;\r\n            &lt;label for=\"password2\" class=\"form-label\"&gt;Confirm Password&lt;\/label&gt;\r\n            &lt;input type=\"password\" class=\"form-control\" id=\"password2\" name=\"password2\"&gt;\r\n        &lt;\/div&gt;\r\n        &lt;button type=\"submit\" class=\"btn btn-primary\"&gt;Submit&lt;\/button&gt;\r\n    &lt;\/div&gt;\r\n&lt;\/form&gt;\r\n<\/pre>\n<p><strong>Views.py<\/strong> :<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">def Register(request):\r\n    If request.method==\"POST\":   \r\n        username = request.POST['username']\r\n        email = request.POST['email']\r\n        first_name=request.POST['first_name']\r\n        last_name=request.POST['last_name']\r\n        password1 = request.POST['password1']\r\n        password2 = request.POST['password2']\r\n        \r\n        if password1 != password2:\r\n            messages.error(request, \"Passwords do not match.\")\r\n            return redirect('\/register')\r\n \r\n        user = User.objects.create_user(username, email, password1)\r\n        user.first_name = first_name\r\n        user.last_name = last_name\r\n        user.save()\r\n        return render(request, 'login.html')  \r\n    return render(request, \"register.html\")\r\n<\/pre>\n<p><strong>Code Explanation:<\/strong><\/p>\n<p>As we know, while registering a new user the fields username, email, first name, last name, password and confirm password are taken as input. Then these details are stored in the user model using the POST request.<\/p>\n<h4>3. Then we create the user login page (login.html) :<\/h4>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;form action=\"\/login\/\" method=\"POST\"&gt; {% csrf_token %}\r\n  &lt;div class=\"container mt-5\"&gt;\r\n  &lt;div class=\"mb-3\"&gt;\r\n    &lt;label for=\"username\" class=\"form-label\"&gt;Username&lt;\/label&gt;\r\n    &lt;input type=\"text\" class=\"form-control\" id=\"username\" name=\"username\"&gt;\r\n  &lt;\/div&gt;\r\n  &lt;div class=\"mb-3\"&gt;\r\n    &lt;label for=\"password\" class=\"form-label\"&gt;Password&lt;\/label&gt;\r\n    &lt;input type=\"password\" class=\"form-control\" id=\"password\" name=\"password\"&gt;\r\n  &lt;\/div&gt;\r\n  &lt;br&gt;\r\n  &lt;button type=\"submit\" class=\"btn btn-primary\"&gt;Submit&lt;\/button&gt;\r\n&lt;\/div&gt;\r\n&lt;\/form&gt;\r\n<\/pre>\n<p><strong>Views.py<\/strong> :<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">def Login(request):\r\n    if request.method==\"POST\":\r\n        username = request.POST['username']\r\n        password = request.POST['password']\r\n        \r\n        user = authenticate(username=username, password=password)\r\n        \r\n        if user is not None:\r\n            login(request, user)\r\n            messages.success(request, \"Successfully Logged In\")\r\n            return redirect(\"\/\")\r\n        else:\r\n            messages.error(request, \"Invalid Credentials\")\r\n        return render(request, 'blog.html')   \r\n    return render(request, \"login.html\")\r\n<\/pre>\n<p><strong>Code Explanation :<\/strong><\/p>\n<p>In the login page the username and password is taken as the input from the users and matched with the database using Django built in function authenticate(). If the logged in credentials are correct then the user gets redirected to the home page else error message that is Invalid Credentials will get displayed.<\/p>\n<h4>4. Then we create the profile page of the user after the user is logged in (profile.html) :<\/h4>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;div class=\"container profile\"&gt;\r\n        &lt;div class=\"row\"&gt;\r\n            &lt;div class=\"col-md-4\"&gt;\r\n                &lt;div class=\"profile-img\"&gt;\r\n                    {% if user.profile.image %}\r\n                    &lt;img src=\"{{user.profile.image.url}}\" alt=\"\" width=\"310px\" height=\"270px\"&gt;\r\n                    {% endif %}\r\n                &lt;\/div&gt;\r\n            &lt;\/div&gt;\r\n            &lt;div class=\"col-md-8\"&gt;\r\n                &lt;div class=\"profile-tab\"&gt;\r\n                    &lt;div class=\"tab-pane\"&gt;\r\n                        &lt;br&gt;&lt;br&gt;\r\n                        &lt;div class=\"row\"&gt;\r\n                            &lt;div class=\"col-md-6\"&gt;\r\n                                &lt;label&gt;Username:&lt;\/label&gt;\r\n                            &lt;\/div&gt;\r\n                            &lt;div class=\"col-md-6\"&gt;\r\n                                &lt;p&gt;{{user}}&lt;\/p&gt;\r\n                            &lt;\/div&gt;\r\n                        &lt;\/div&gt;\r\n                        &lt;div class=\"row\"&gt;\r\n                            &lt;div class=\"col-md-6\"&gt;\r\n                                &lt;label&gt;Full Name:&lt;\/label&gt;\r\n                            &lt;\/div&gt;\r\n                            &lt;div class=\"col-md-6\"&gt;\r\n                                &lt;p&gt;{{user.get_full_name}}&lt;\/p&gt;\r\n                            &lt;\/div&gt;\r\n                        &lt;\/div&gt;\r\n                        &lt;div class=\"row\"&gt;\r\n                            &lt;div class=\"col-md-6\"&gt;\r\n                                &lt;label&gt;Email:&lt;\/label&gt;\r\n                            &lt;\/div&gt;\r\n                            &lt;div class=\"col-md-6\"&gt;\r\n                                &lt;p&gt;{{user.email}}&lt;\/p&gt;\r\n                            &lt;\/div&gt;\r\n                        &lt;\/div&gt;\r\n                        {% if user.profile.phone_no %}\r\n                        &lt;div class=\"row\"&gt;\r\n                            &lt;div class=\"col-md-6\"&gt;\r\n                                &lt;label&gt;Phone Number:&lt;\/label&gt;\r\n                            &lt;\/div&gt;\r\n                            &lt;div class=\"col-md-6\"&gt;\r\n                                &lt;p&gt;{{user.profile.phone_no}}&lt;\/p&gt;\r\n                            &lt;\/div&gt;\r\n                        &lt;\/div&gt;\r\n                        {% endif %}\r\n                        {% if user.profile.bio %}\r\n                        &lt;div class=\"row\"&gt;\r\n                            &lt;div class=\"col-md-6\"&gt;\r\n                                &lt;label&gt;Bio:&lt;\/label&gt;\r\n                            &lt;\/div&gt;\r\n                            &lt;div class=\"col-md-6\"&gt;\r\n                                &lt;p&gt;{{user.profile.bio}}&lt;\/p&gt;\r\n                            &lt;\/div&gt;\r\n                        &lt;\/div&gt;\r\n                        {% endif %}\r\n                        {% if user.profile.linkedin %}\r\n                        &lt;div class=\"row\"&gt;\r\n                            &lt;div class=\"col-md-6\"&gt;\r\n                                &lt;label&gt;Linkedin:&lt;\/label&gt;\r\n                            &lt;\/div&gt;\r\n                            &lt;div class=\"col-md-6\"&gt;\r\n                                &lt;p&gt;&lt;a href=\"{{user.profile.linkedin}}\"&gt;{{user.profile.linkedin}}&lt;\/a&gt;&lt;\/p&gt;\r\n                            &lt;\/div&gt;\r\n                        &lt;\/div&gt;\r\n                        {% endif %}\r\n                        {% if user.profile.instagram %}\r\n                        &lt;div class=\"row\"&gt;\r\n                            &lt;div class=\"col-md-6\"&gt;\r\n                                &lt;label&gt;Instagram:&lt;\/label&gt;\r\n                            &lt;\/div&gt;\r\n                            &lt;div class=\"col-md-6\"&gt;\r\n                                &lt;p&gt;&lt;a href=\"{{user.profile.instagram}}\"&gt;{{user.profile.instagram}}&lt;\/a&gt;&lt;\/p&gt;\r\n                            &lt;\/div&gt;\r\n                        &lt;\/div&gt;\r\n                        {% endif %}\r\n                        {% if user.profile.facebook %}\r\n                        &lt;div class=\"row\"&gt;\r\n                            &lt;div class=\"col-md-6\"&gt;\r\n                                &lt;label&gt;Facebook:&lt;\/label&gt;\r\n                            &lt;\/div&gt;\r\n                            &lt;div class=\"col-md-6\"&gt;\r\n                                &lt;p&gt;&lt;a href=\"{{user.profile.facebook}}\"&gt;{{user.profile.facebook}}&lt;\/a&gt;&lt;\/p&gt;\r\n                            &lt;\/div&gt;\r\n                        &lt;\/div&gt;\r\n                        {% endif %}\r\n                    &lt;\/div&gt;\r\n                    &lt;a href=\"\/edit_profile\/\" class=\"btn btn-secondary\"&gt;Edit Profile&lt;\/a&gt;\r\n                &lt;\/div&gt;\r\n            &lt;\/div&gt;\r\n&lt;\/div&gt;\r\n&lt;\/div&gt;\r\n<\/pre>\n<p><strong>Views.py<\/strong> :<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">def Profile(request):\r\n    return render(request, \"profile.html\")\r\n<\/pre>\n<p><strong>For editing the profile page: (edit_profile.html)<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;form action=\"\/edit_profile\/\" enctype=\"multipart\/form-data\" method=\"POST\"&gt; {% csrf_token %}\r\n    &lt;div class=\"container mt-3\"&gt;\r\n   {{ form.as_p }}\r\n        &lt;button type=\"submit\" class=\"btn btn-primary\"&gt;Update&lt;\/button&gt;\r\n    &lt;\/div&gt;\r\n&lt;\/form&gt;\r\n<\/pre>\n<p><strong>Views.py<\/strong> :<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">def edit_profile(request):\r\n    try:\r\n        profile = request.user.profile\r\n    except Profile.DoesNotExist:\r\n        profile = Profile(user=request.user)\r\n    if request.method==\"POST\":\r\n        form = ProfileForm(data=request.POST, files=request.FILES, instance=profile)\r\n        if form.is_valid():\r\n            form.save()\r\n            alert = True\r\n            return render(request, \"edit_profile.html\", {'alert':alert})\r\n    else:\r\n        form=ProfileForm(instance=profile)\r\n    return render(request, \"edit_profile.html\", {'form':form})\r\n<\/pre>\n<p><strong>Forms.py<\/strong> :<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">class ProfileForm(forms.ModelForm):\r\n    class Meta:\r\n        model = Profile\r\n        fields = ('phone_no', 'bio', 'facebook', 'instagram', 'linkedin', 'image', )\r\n<\/pre>\n<p><strong>Code Explanation :<\/strong><br \/>\nAfter login is done the user can view their profile where the user\u2019s username, full name and email is displayed. The user can add a profile photo if the user wants and also add a bio, phone no, linkedin id, instagram id and facebook id so that other people can view the user&#8217;s profile and view the necessary information on it.<\/p>\n<h4>5. Home page where there are all the blogs (blog.html) :<\/h4>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;div class=\"container mt-5 mb-3\"&gt;\r\n \r\n    &lt;div class=\"row\"&gt;\r\n        {% for post in posts %}\r\n        &lt;div class=\"col-lg-4 my-4\"&gt;\r\n            &lt;div class=\"card shadow\" style=\"width: 20rem; height: 33rem;\"&gt;\r\n                &lt;img src=\"\/media\/{{post.image}}\" class=\"card-img-top\" alt=\"...\" height=\"250px\"&gt;\r\n                &lt;div class=\"card-body\"&gt;\r\n                  &lt;h5 class=\"card-title\"&gt;{{post.title}} &lt;br&gt;&lt;small&gt;by {{post.author}}&lt;\/small&gt;&lt;\/h5&gt;\r\n                  &lt;p class=\"card-text\"&gt;{{post.content| truncatechars:210}}&lt;\/p&gt;\r\n                  &lt;a href=\"blog\/{{post.slug}}\" class=\"btn btn-primary\"&gt;Read More {% if user.is_superuser %}&lt;a href=\"delete_blog_post\/{{post.slug}}\/\" class=\"btn btn-danger mx-4\"&gt;Delete Blog&lt;\/a&gt;{% endif %}&lt;\/a&gt;\r\n                &lt;\/div&gt;\r\n              &lt;\/div&gt;\r\n        &lt;\/div&gt;\r\n        {% endfor %}\r\n    &lt;\/div&gt;\r\n&lt;\/div&gt;\r\n<\/pre>\n<p><strong>Views.py<\/strong> :<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">def blogs(request):\r\n    posts = BlogPost.objects.all()\r\n    posts = BlogPost.objects.filter().order_by('-dateTime')\r\n    return render(request, \"blog.html\", {'posts':posts})\r\n<\/pre>\n<p><strong>Code Explanation :<\/strong><\/p>\n<p>Using a bootstrap card all the basic information about the blog that is the image, title, author and description is displayed using a for loop. Then on clicking the read more button users can see the whole blog. The delete blog button is visible only to the superuser that is the admin.<\/p>\n<h4>6. Adding new blogs (add_blogs.html) :<\/h4>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;form action=\"\/add_blogs\/\" enctype=\"multipart\/form-data\" method=\"POST\"&gt; {% csrf_token %}\r\n&lt;div class=\"container mt-4\"&gt;\r\n{{ form.as_p }}\r\n&lt;button class=\"btn btn-primary\"&gt;Add Blog&lt;\/button&gt;\r\n&lt;\/div&gt;\r\n&lt;\/form&gt;\r\n<\/pre>\n<p><strong>Views.py<\/strong>:<\/p>\n<p><strong>@login_required(login_url = &#8216;\/login&#8217;)<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">def add_blogs(request):\r\n    if request.method==\"POST\":\r\n        form = BlogPostForm(data=request.POST, files=request.FILES)\r\n        if form.is_valid():\r\n            blogpost = form.save(commit=False)\r\n            blogpost.author = request.user\r\n            blogpost.save()\r\n            obj = form.instance\r\n            alert = True\r\n            return render(request, \"add_blogs.html\",{'obj':obj, 'alert':alert})\r\n    else:\r\n        form=BlogPostForm()\r\n    return render(request, \"add_blogs.html\", {'form':form})\r\n<\/pre>\n<p><strong>Forms.py<\/strong> :<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">class BlogPostForm(forms.ModelForm):\r\n    class Meta:\r\n        model = BlogPost\r\n        fields = ('title', 'slug', 'content', 'image')\r\n        widgets = {\r\n            'title': forms.TextInput(attrs={'class':'form-control', 'placeholder':'Title of the Blog'}),\r\n            'slug': forms.TextInput(attrs={'class':'form-control', 'placeholder':'Copy the title with no space and a hyphen in between'}),\r\n            'content': forms.Textarea(attrs={'class':'form-control', 'placeholder':'Content of the Blog'}),\r\n        }\r\n<\/pre>\n<p><strong>Code Explanation :<\/strong><\/p>\n<p>User\u2019s can add new blogs by navigating to the add blogs option in the navigation bar.<\/p>\n<p>@login_required(login_url = &#8216;\/login&#8217;) using this decorator if the user is not logged in then that user will not be allowed to add a blog instead the user will be redirected to the login page.<\/p>\n<h4>7. This page displays the entire blog and the users are allowed to comment on any blog. (blog_comments.html) :<\/h4>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;div class=\"container w-75 my-4\"&gt;\r\n      &lt;h2 class=\"blog-post-title\"&gt;{{post.title}}&lt;\/h2&gt;\r\n      &lt;br&gt;\r\n      &lt;div class=\"media\"&gt;\r\n            {% if post.author.profile.image %}\r\n            &lt;img class=\"mr-3 rounded-circle\" src=\"{{post.author.profile.image.url}}\" width=\"50px\" height=\"50px\"\r\n                  alt=\"image\"&gt;\r\n            {% endif %}\r\n            &lt;div class=\"media-body\"&gt;\r\n                  &lt;h5 class=\"mt-0\"&gt;&lt;a href=\"\/user_profile\/{{post.author.id}}\/\"&gt;{{post.author}}\r\n                              {% if user.is_authenticated %}\r\n                              {% if user.id == post.author.id %}\r\n                              &lt;small&gt;&lt;a href=\"\/edit_blog_post\/{{post.slug}}\/\" class=\"edit btn btn-warning\"&gt;Edit Blog Post&lt;\/a&gt;&lt;\/small&gt;\r\n                              {% endif %}\r\n                              {% endif %}\r\n                        &lt;\/a&gt;&lt;\/h5&gt;\r\n                  {{post.dateTime}}\r\n            &lt;\/div&gt;\r\n      &lt;\/div&gt;\r\n      &lt;br&gt;\r\n      &lt;img src=\"\/media\/{{post.image}}\" alt=\"\" height=\"250px\" width=\"500px\"&gt;\r\n      &lt;br&gt;\r\n      &lt;p&gt;{{post.content}}.&lt;\/p&gt;\r\n      &lt;hr&gt;\r\n      {% if user.is_authenticated %}\r\n      &lt;div class=\"container\"&gt;\r\n            &lt;h2&gt;Add Comments Here&lt;\/h2&gt;\r\n            &lt;form action=\"\/blog\/{{post.slug}}\/\" method=\"POST\"&gt; {% csrf_token %}\r\n                  &lt;div class=\"form-floating\"&gt;\r\n                        &lt;textarea class=\"form-control\" placeholder=\"Leave a comment here\" id=\"floatingTextarea2\"\r\n                              style=\"height: 100px\" id=\"content\" name=\"content\"&gt;&lt;\/textarea&gt;\r\n                        &lt;label for=\"floatingTextarea2\"&gt;Leave a comment here.&lt;\/label&gt;\r\n                        &lt;br&gt;\r\n                        &lt;button type=\"submit\" class=\"btn btn-primary\"&gt;Comment&lt;\/button&gt;\r\n                  &lt;\/div&gt;\r\n            &lt;\/form&gt;\r\n            {% else %}\r\n            &lt;div class=\"container\"&gt;\r\n                  &lt;h4&gt;&lt;a href=\"\/login\/\"&gt;Login&lt;\/a&gt; to post comments below.&lt;\/h4&gt;\r\n                  {% endif %}\r\n                  &lt;br&gt;\r\n                  &lt;h2&gt;All Comments ({{comments.count}})&lt;\/h2&gt;\r\n                  &lt;br&gt;\r\n                  {% for comment in comments %}\r\n                  &lt;div class=\"card\"&gt;\r\n                        &lt;div class=\"card-header\"&gt;\r\n                              &lt;span style=\"font-size: 22px;\"&gt;{{comment.user}} &lt;\/span&gt; &lt;span\r\n                                    style=\"font-size: 12px;\"&gt;{{comment.dateTime | naturaltime}}&lt;\/span&gt;\r\n                        &lt;\/div&gt;\r\n                        &lt;div class=\"card-body\"&gt;\r\n                              &lt;h6 class=\"card-text\"&gt;{{comment.content}}&lt;\/h6&gt;\r\n                        &lt;\/div&gt;\r\n                  &lt;\/div&gt;\r\n                  &lt;br&gt;\r\n                  {% endfor %}\r\n            &lt;\/div&gt;\r\n      &lt;\/div&gt;\r\n<\/pre>\n<p><strong>Views.py<\/strong> :<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">def blogs_comments(request, slug):\r\n    post = BlogPost.objects.filter(slug=slug).first()\r\n    comments = Comment.objects.filter(blog=post)\r\n    if request.method==\"POST\":\r\n        user = request.user\r\n        content = request.POST.get('content','')\r\n        blog_id =request.POST.get('blog_id','')\r\n        comment = Comment(user = user, content = content, blog=post)\r\n        comment.save()\r\n    return render(request, \"blog_comments.html\", {'post':post, 'comments':comments}) \r\n<\/pre>\n<p><strong>Code Explanation :<\/strong><\/p>\n<p>After clicking on the read more button the user\u2019s are redirected to this page where the entire blog will be displayed with the comments section below it.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">{% if user.id == post.author.id %}\r\n<\/pre>\n<p>If the logged in user\u2019s id is equal to the posted blog\u2019s author id then only that particular user will be allowed to edit that respective blog post. No one else will be allowed to edit other user\u2019s blog posts.<\/p>\n<p>User\u2019s can comment their thoughts on any of the blog posts that they want to.<\/p>\n<p>post = BlogPost.objects.filter(slug=slug).first()<\/p>\n<p>comments = Comment.objects.filter(blog=post)<\/p>\n<p>Using the above two lines the posted comment will get displayed on the respective blog post.<\/p>\n<p>By clicking on the blog post\u2019s author, the profile of that author will get displayed so that other user\u2019s can view the profile.<\/p>\n<h3>Django Blog Project output:<\/h3>\n<p><strong>User registration page:<\/strong><\/p>\n<p><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/register-page.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-100212\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/register-page.png\" alt=\"register page\" width=\"1920\" height=\"954\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/register-page.png 1920w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/register-page-768x382.png 768w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/register-page-1536x763.png 1536w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/register-page-720x358.png 720w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/register-page-520x258.png 520w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/register-page-320x159.png 320w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><\/p>\n<p><strong>First Page of the Django Blog Application project with all the posted blogs (admin login):<\/strong><\/p>\n<p><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-home-admin.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-100213\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-home-admin.png\" alt=\"blog home admin\" width=\"1920\" height=\"954\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-home-admin.png 1920w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-home-admin-768x382.png 768w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-home-admin-1536x763.png 1536w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-home-admin-720x358.png 720w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-home-admin-520x258.png 520w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-home-admin-320x159.png 320w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><\/p>\n<p><strong>Home Page (user login):<\/strong><\/p>\n<p><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-home-user.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-100214\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-home-user.png\" alt=\"blog home user\" width=\"1920\" height=\"954\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-home-user.png 1920w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-home-user-768x382.png 768w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-home-user-1536x763.png 1536w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-home-user-720x358.png 720w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-home-user-520x258.png 520w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-home-user-320x159.png 320w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><\/p>\n<p><strong>Logged in users can add a new blog:<\/strong><\/p>\n<p><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/add-blogs-page.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-100215\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/add-blogs-page.png\" alt=\"add blogs page\" width=\"1920\" height=\"954\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/add-blogs-page.png 1920w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/add-blogs-page-768x382.png 768w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/add-blogs-page-1536x763.png 1536w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/add-blogs-page-720x358.png 720w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/add-blogs-page-520x258.png 520w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/add-blogs-page-320x159.png 320w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><\/p>\n<p><strong>Clicking on read more to view the entire blog:<\/strong><br \/>\n<strong>By clicking on the author name other users can see the profile of the author<\/strong><\/p>\n<p><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-details.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-100216\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-details.png\" alt=\"blog details\" width=\"1920\" height=\"954\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-details.png 1920w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-details-768x382.png 768w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-details-1536x763.png 1536w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-details-720x358.png 720w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-details-520x258.png 520w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-details-320x159.png 320w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><\/p>\n<p><strong>Users can also comment on any blog posts:<\/strong><\/p>\n<p><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-comments.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-100217\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-comments.png\" alt=\"blog comments\" width=\"1920\" height=\"954\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-comments.png 1920w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-comments-768x382.png 768w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-comments-1536x763.png 1536w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-comments-720x358.png 720w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-comments-520x258.png 520w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/blog-comments-320x159.png 320w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><\/p>\n<p><strong>Search blogs by their title:<\/strong><\/p>\n<p><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/search.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-100218\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/search.png\" alt=\"search\" width=\"1920\" height=\"954\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/search.png 1920w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/search-768x382.png 768w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/search-1536x763.png 1536w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/search-720x358.png 720w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/search-520x258.png 520w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/search-320x159.png 320w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><\/p>\n<h3>Summary<\/h3>\n<p>With this project in Django, we have successfully developed a Blog Application with proper front-end and back-end. Now, we know many concepts in Django. You can try to add more features or anything that you think is missing to this blog application and keep learning.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Let us develop a Blog Application using Django and let others post beautiful blogs on it. Here the users will also be able to post comments on any blog. This is a very useful&#46;&#46;&#46;<\/p>\n","protected":false},"author":5,"featured_media":100211,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19149],"tags":[24903,24904,24905,24909,19201,24910,21613],"class_list":["post-100199","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-django","tag-django-blog","tag-django-blog-application-project","tag-django-blog-application-source-code","tag-django-blog-project","tag-django-project","tag-django-project-for-beginners","tag-python-django-project"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Create a Blog Application with Python Django - DataFlair<\/title>\n<meta name=\"description\" content=\"Develop Blog Application using Django and let others post beautiful blogs on it. Users can also post comments on any blog.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/data-flair.training\/blogs\/django-blog-application-project\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Create a Blog Application with Python Django - DataFlair\" \/>\n<meta property=\"og:description\" content=\"Develop Blog Application using Django and let others post beautiful blogs on it. Users can also post comments on any blog.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/data-flair.training\/blogs\/django-blog-application-project\/\" \/>\n<meta property=\"og:site_name\" content=\"DataFlair\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/DataFlairWS\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-08-07T03:30:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-01T07:12:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/python-django-project-create-blog-application.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"DataFlair Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@DataFlairWS\" \/>\n<meta name=\"twitter:site\" content=\"@DataFlairWS\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"DataFlair Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Create a Blog Application with Python Django - DataFlair","description":"Develop Blog Application using Django and let others post beautiful blogs on it. Users can also post comments on any blog.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/data-flair.training\/blogs\/django-blog-application-project\/","og_locale":"en_US","og_type":"article","og_title":"Create a Blog Application with Python Django - DataFlair","og_description":"Develop Blog Application using Django and let others post beautiful blogs on it. Users can also post comments on any blog.","og_url":"https:\/\/data-flair.training\/blogs\/django-blog-application-project\/","og_site_name":"DataFlair","article_publisher":"https:\/\/www.facebook.com\/DataFlairWS\/","article_published_time":"2021-08-07T03:30:45+00:00","article_modified_time":"2026-06-01T07:12:18+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/python-django-project-create-blog-application.jpg","type":"image\/jpeg"}],"author":"DataFlair Team","twitter_card":"summary_large_image","twitter_creator":"@DataFlairWS","twitter_site":"@DataFlairWS","twitter_misc":{"Written by":"DataFlair Team","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/data-flair.training\/blogs\/django-blog-application-project\/#article","isPartOf":{"@id":"https:\/\/data-flair.training\/blogs\/django-blog-application-project\/"},"author":{"name":"DataFlair Team","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/person\/7f83c342f5d1632d6f7b4b0b0f447823"},"headline":"Create a Blog Application with Python Django","datePublished":"2021-08-07T03:30:45+00:00","dateModified":"2026-06-01T07:12:18+00:00","mainEntityOfPage":{"@id":"https:\/\/data-flair.training\/blogs\/django-blog-application-project\/"},"wordCount":960,"commentCount":14,"publisher":{"@id":"https:\/\/data-flair.training\/blogs\/#organization"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/django-blog-application-project\/#primaryimage"},"thumbnailUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/python-django-project-create-blog-application.jpg","keywords":["Django Blog","Django Blog Application project","Django Blog Application source code","django blog project","Django Project","django project for beginners","python django project"],"articleSection":["Django Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/data-flair.training\/blogs\/django-blog-application-project\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/data-flair.training\/blogs\/django-blog-application-project\/","url":"https:\/\/data-flair.training\/blogs\/django-blog-application-project\/","name":"Create a Blog Application with Python Django - DataFlair","isPartOf":{"@id":"https:\/\/data-flair.training\/blogs\/#website"},"primaryImageOfPage":{"@id":"https:\/\/data-flair.training\/blogs\/django-blog-application-project\/#primaryimage"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/django-blog-application-project\/#primaryimage"},"thumbnailUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/python-django-project-create-blog-application.jpg","datePublished":"2021-08-07T03:30:45+00:00","dateModified":"2026-06-01T07:12:18+00:00","description":"Develop Blog Application using Django and let others post beautiful blogs on it. Users can also post comments on any blog.","breadcrumb":{"@id":"https:\/\/data-flair.training\/blogs\/django-blog-application-project\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/data-flair.training\/blogs\/django-blog-application-project\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/data-flair.training\/blogs\/django-blog-application-project\/#primaryimage","url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/python-django-project-create-blog-application.jpg","contentUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/08\/python-django-project-create-blog-application.jpg","width":1200,"height":628,"caption":"python django project create blog application"},{"@type":"BreadcrumbList","@id":"https:\/\/data-flair.training\/blogs\/django-blog-application-project\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog Home","item":"https:\/\/data-flair.training\/blogs\/"},{"@type":"ListItem","position":2,"name":"Django Tutorials","item":"https:\/\/data-flair.training\/blogs\/category\/django\/"},{"@type":"ListItem","position":3,"name":"Create a Blog Application with Python Django"}]},{"@type":"WebSite","@id":"https:\/\/data-flair.training\/blogs\/#website","url":"https:\/\/data-flair.training\/blogs\/","name":"DataFlair","description":"Learn Today. Lead Tomorrow.","publisher":{"@id":"https:\/\/data-flair.training\/blogs\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/data-flair.training\/blogs\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/data-flair.training\/blogs\/#organization","name":"DataFlair","url":"https:\/\/data-flair.training\/blogs\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/logo\/image\/","url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2016\/07\/Data-Flair.png","contentUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2016\/07\/Data-Flair.png","width":106,"height":48,"caption":"DataFlair"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/DataFlairWS\/","https:\/\/x.com\/DataFlairWS","https:\/\/www.linkedin.com\/company\/dataflair-web-services-pvt-ltd\/","https:\/\/www.youtube.com\/user\/DataFlairWS"]},{"@type":"Person","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/person\/7f83c342f5d1632d6f7b4b0b0f447823","name":"DataFlair Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/4cf3a74600d131330b8c481d519afd1574093ed89f6d3396a95393ad223eb7cd?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/4cf3a74600d131330b8c481d519afd1574093ed89f6d3396a95393ad223eb7cd?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4cf3a74600d131330b8c481d519afd1574093ed89f6d3396a95393ad223eb7cd?s=96&d=mm&r=g","caption":"DataFlair Team"},"description":"DataFlair Team creates expert-level guides on programming, Java, Python, C++, DSA, AI, ML, data Science, Android, Flutter, MERN, Web Development, and technology. Our goal is to empower learners with easy-to-understand content. Explore our resources for career growth and practical learning.","url":"https:\/\/data-flair.training\/blogs\/author\/dfteam1\/"}]}},"amp_enabled":false,"_links":{"self":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/100199","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/comments?post=100199"}],"version-history":[{"count":4,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/100199\/revisions"}],"predecessor-version":[{"id":148629,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/100199\/revisions\/148629"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/media\/100211"}],"wp:attachment":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/media?parent=100199"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/categories?post=100199"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/tags?post=100199"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}