{"id":80873,"date":"2021-05-25T10:45:34","date_gmt":"2021-05-25T05:15:34","guid":{"rendered":"https:\/\/techvidvan.com\/tutorials\/?p=80873"},"modified":"2026-06-03T15:31:12","modified_gmt":"2026-06-03T10:01:12","slug":"python-django-project-content-aggregator","status":"publish","type":"post","link":"https:\/\/techvidvan.com\/tutorials\/python-django-project-content-aggregator\/","title":{"rendered":"Create a Content Aggregator using Python Django"},"content":{"rendered":"<p>In this article, we are going to develop yet another interesting python django project <strong>Content Aggregator<\/strong><\/p>\n<h3>Content Aggregator<\/h3>\n<p>When we look for something on the internet, we get a lot of search results and it is really tiring to go through all of the content so why not we create an application which sorts and displays the required content according to our requirements.<\/p>\n<h3>Functionalities of Python Content Aggregator:<\/h3>\n<ul>\n<li>Display the latest python, programming, hiring, and Covid blogs. Note: we have selected four topics for this project, you can take any topic you want.<\/li>\n<li>Update python blogs.<\/li>\n<li>Update programming blogs.<\/li>\n<li>Update hiring alerts.<\/li>\n<li>Update covid news.<\/li>\n<\/ul>\n<h3>Project Prerequisites<\/h3>\n<p>To install the required packages you can use the pip installer from the terminal.<\/p>\n<p><strong>To install Django<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">pip install Django\r\n<\/pre>\n<p><strong>To install feedparser<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">pip install feedparser\r\n<\/pre>\n<h3>Download Content Aggregator Python Code<\/h3>\n<p>Please download the source code of python content aggregator: <a href=\"https:\/\/drive.google.com\/file\/d\/1lqWpQRbHJ3YplrEJ61gyIH-KTkPbH4eh\/view?usp=drive_link\"><strong>Content Aggregator Python Code<\/strong><\/a><\/p>\n<h3>Steps to Content Aggregator Project in Python Django<\/h3>\n<p>To start the django project, run below commands:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">django-admin startproject ContentAggregator\r\ncd ContentAggregator\r\ndjango-admin startapp app\r\n<\/pre>\n<h3>Writing Models<\/h3>\n<p><strong>Code:<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">from django.db import models\r\n \r\n# Create your models here.\r\nclass PyContent(models.Model):\r\n  headline = models.CharField(max_length=300)\r\n  img = models.URLField(null=True, blank=True)\r\n  url = models.TextField()\r\n  def __str__(self):\r\n    return self.headline\r\n \r\nclass ProgContent(models.Model):\r\n  headline = models.CharField(max_length=300)\r\n  img = models.URLField(null=True, blank=True)\r\n  url = models.TextField()\r\n  def __str__(self):\r\n    return self.headline\r\n \r\nclass HiringContent(models.Model):\r\n  headline = models.CharField(max_length=300)\r\n  img = models.URLField(null=True, blank=True)\r\n  url = models.TextField()\r\n  def __str__(self):\r\n    return self.headline\r\n \r\nclass CovidContent(models.Model):\r\n  headline = models.CharField(max_length=300)\r\n  img = models.URLField(null=True, blank=True)\r\n  url = models.TextField()\r\n  def __str__(self):\r\n    return self.headline\r\n<\/pre>\n<p>As we have discussed, we are considering four topics for this project. We have defined four models and we require the image, headline and url of the full article.<\/p>\n<p>The headline would be a string(text) and in django we have \u2018CharField\u2019 to represent a string, we can specify the maximum possible length for this, in our case the max_length is 300. For images, we will store the image address(the url of the image) so we have declared the image as URLField and finally we have a url for every article.<\/p>\n<p>The __str__() method returns headline as the string representation of every record in the table.<\/p>\n<p>We have the same three attributes for all our models.<\/p>\n<p>To actually create database tables, run the following commands:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">Py manage.py makemigrations\r\nPy manage.py migrate\r\n<\/pre>\n<h3>admin.py<\/h3>\n<p><strong>Code:<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">from django.contrib import admin\r\nfrom .models import *\r\n \r\n# Register your models here.\r\nadmin.site.register(ProgContent)\r\nadmin.site.register(HiringContent)\r\nadmin.site.register(PyContent)\r\nadmin.site.register(CovidContent)\r\n<\/pre>\n<p>To access database objects from admin panel, we are registering the models on admin panel.<\/p>\n<p>Django creates the admin panel by default for every project, we can surely create our own interface for admin also, but registering models on the admin panel makes it much easier to access the database.<\/p>\n<p>We need a user (a superuser\/staff user to be more specific) to access the admin panel. You can follow below steps to create a superuser.<\/p>\n<p>To create superuser<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">py manage.py createsuperuser<\/pre>\n<p>It will ask you to enter username, email, and password.<\/p>\n<h3>settings.py<\/h3>\n<p>To use static files (images and javascript) we have to provide the path of our static files in settings.py.<\/p>\n<p>Thus, to use static files we have to append this code in settings.py.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">import os\r\nSTATIC_URL = '\/static\/'\r\nSTATICFILES_DIRS=[\r\n    os.path.join(BASE_DIR,'static')\r\n]\r\n<\/pre>\n<h3>urls.py<\/h3>\n<p>In django, we have to define url paths for all the view functions, to define the path we have to first import the view functions:<\/p>\n<p>from app.views import *<\/p>\n<p>After importing we can simply define the path of the url :<\/p>\n<p>path(&#8216;updatepython\/&#8217;, updatepython,name=&#8217;updatepython&#8217;),<\/p>\n<p>This file defines url paths for all the view functions<\/p>\n<p><strong>Code:<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">\"\"\"ContentAggregator URL Configuration\r\n \r\nThe `urlpatterns` list routes URLs to views. For more information please see:\r\n    https:\/\/docs.djangoproject.com\/en\/3.1\/topics\/http\/urls\/\r\nExamples:\r\nFunction views\r\n    1. Add an import:  from my_app import views\r\n    2. Add a URL to urlpatterns:  path('', views.home, name='home')\r\nClass-based views\r\n    1. Add an import:  from other_app.views import Home\r\n    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')\r\nIncluding another URLconf\r\n    1. Import the include() function: from django.urls import include, path\r\n    2. Add a URL to urlpatterns:  path('blog\/', include('blog.urls'))\r\n\"\"\"\r\nfrom django.contrib import admin\r\nfrom django.urls import path\r\nfrom app.views import *\r\nfrom django.conf import settings\r\nfrom django.conf.urls.static import static\r\n \r\nurlpatterns = [\r\n    path('admin\/', admin.site.urls),\r\n    path('', home,name='home'),\r\n    path('updatepython\/', updatepython,name='updatepython'),\r\n    path('updateprog\/', updateprog,name='updateprog'),\r\n    path('updatecovid\/', updatecovid,name='updatecovid'),\r\n    path('updatehiring\/', updatehiring,name='updatehiring'),\r\n]\r\n \r\nurlpatterns+=static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)\r\n<\/pre>\n<h3>views.py<\/h3>\n<p><strong>Code:<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">from app.models import *\r\nfrom django.shortcuts import render,redirect\r\nfrom django.http  import HttpResponse\r\nimport feedparser\r\n \r\n# Create your views here.\r\ndef updatepython(request):\r\n    #-------python----------------\r\n    url = feedparser.parse(\r\n            \"https:\/\/medium.com\/feed\/tag\/python\"\r\n        )\r\n    for i in range(10):\r\n        info = url.entries[i]\r\n        content= PyContent()\r\n        content.headline= info.title\r\n        #-----finding image link\r\n        desc = info.description\r\n        start=desc.find(\"img src=\")\r\n        end=desc.find(\"width\")\r\n        \r\n        print(desc[end:])\r\n        desc=desc[start+9:end-2:]\r\n        print(\"-----------------------------\")\r\n        print(desc)\r\n \r\n        #---------------\r\n        content.img = desc\r\n        content.url  = info.link\r\n        content.save()\r\n    \r\n    return redirect('\/')\r\n \r\ndef updatecovid(request):\r\n    #-------python----------------\r\n    url = feedparser.parse(\r\n            \"https:\/\/medium.com\/feed\/tag\/covid\"\r\n        )\r\n    for i in range(10):\r\n        info = url.entries[i]\r\n        content= CovidContent()\r\n        content.headline= info.title\r\n        print(\"################################\")\r\n        print(content.headline)\r\n        #-----finding image link\r\n        desc = info.description\r\n        start=desc.find(\"img src=\")\r\n        end=desc.find(\"width\")\r\n        \r\n        print(desc[end:])\r\n        desc=desc[start+9:end-2:]\r\n        print(\"-----------------------------\")\r\n        print(desc)\r\n \r\n        #---------------\r\n        content.img = desc\r\n        content.url  = info.link\r\n        content.save()\r\n    \r\n    return redirect('\/')\r\n \r\ndef updateprog(request):\r\n    #-------python----------------\r\n    url = feedparser.parse(\r\n            \"https:\/\/medium.com\/feed\/tag\/programming\"\r\n        )\r\n    for i in range(10):\r\n        info = url.entries[i]\r\n        content= ProgContent()\r\n        content.headline= info.title\r\n        #-----finding image link\r\n        desc = info.description\r\n        start=desc.find(\"img src=\")\r\n        end=desc.find(\"width\")\r\n        \r\n        print(desc[end:])\r\n        desc=desc[start+9:end-2:]\r\n        print(\"-----------------------------\")\r\n        print(desc)\r\n \r\n        #---------------\r\n        content.img = desc\r\n        content.url  = info.link\r\n        content.save()\r\n    \r\n    return redirect('\/')\r\n \r\ndef updatehiring(request):\r\n    #-------python----------------\r\n    url = feedparser.parse(\r\n            \"https:\/\/medium.com\/feed\/tag\/hiring\"\r\n        )\r\n    for i in range(10):\r\n        info = url.entries[i]\r\n        content= HiringContent()\r\n        content.headline= info.title\r\n        #-----finding image link\r\n        desc = info.description\r\n        start=desc.find(\"img src=\")\r\n        end=desc.find(\"width\")\r\n        \r\n        print(desc[end:])\r\n        desc=desc[start+9:end-2:]\r\n        print(\"-----------------------------\")\r\n        print(desc)\r\n \r\n        #---------------\r\n        content.img = desc\r\n        content.url  = info.link\r\n        content.save()\r\n    \r\n    return redirect('\/')\r\n \r\ndef home(request):\r\n    pycontent = PyContent.objects.all()\r\n    progcontent = ProgContent.objects.all()\r\n    hiringcontent = HiringContent.objects.all()\r\n    covidcontent = CovidContent.objects.all()\r\n    context = { \r\n        'pycontent': pycontent,\r\n        'progcontent': progcontent,\r\n        'hiringcontent': hiringcontent,\r\n        'covidcontent': covidcontent,\r\n    }\r\n    return render(request,'app\/home.html',context)\r\n<\/pre>\n<p>In views.py we have home() method. Here is a short description of the method.<\/p>\n<h3>Home()<\/h3>\n<p>This function renders all the objects of PyContent, ProgContent, HiringContent, and CovidContent. To render the objects of the model we are using the all() method which returns all the objects of the model. After that, we are passing all this information to home.html.<\/p>\n<p>Home.html displays all the objects beautifully using html, css and bootstrap.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">{% extends 'app\/links.html' %}\r\n \r\n{% load static%}\r\n \r\n{% block content %}\r\n \r\n&lt;div class=\"container \"&gt;\r\n    &lt;h1&gt;Python Blogs&lt;\/h1&gt;\r\n    &lt;div class=\"card-columns\" style=\"padding: 10px; margin: 20px;\"&gt;\r\n    {% for p in pycontent %}\r\n        &lt;div class=\"card\" style=\"width: 18rem; border:5px black solid\"&gt;\r\n            &lt;img class=\"card-img-top\" src=\"{{p.img}}\" alt=\"Card image cap\"&gt;\r\n           \r\n            &lt;div class=\"card-body\"&gt;\r\n            &lt;h5 class=\"card-title\"&gt;{{p.headline}}&lt;\/h5&gt;\r\n            &lt;a href=\"{{p.url}}\"&gt;For more info click here &lt;\/a&gt;\r\n            \r\n            &lt;\/div&gt;\r\n        &lt;\/div&gt;\r\n     {% endfor %}\r\n    \r\n    &lt;\/div&gt;\r\n \r\n    &lt;h1&gt;Programming Blogs&lt;\/h1&gt;\r\n    &lt;div class=\"card-columns\" style=\"padding: 10px; margin: 20px;\"&gt;\r\n    {% for p in progcontent %}\r\n        &lt;div class=\"card\" style=\"width: 18rem; border:5px black solid\"&gt;\r\n            &lt;img class=\"card-img-top\" src=\"{{p.img}}\" alt=\"Card image cap\"&gt;\r\n           \r\n            &lt;div class=\"card-body\"&gt;\r\n            &lt;h5 class=\"card-title\"&gt;{{p.headline}}&lt;\/h5&gt;\r\n            &lt;a href=\"{{p.url}}\"&gt;For more info click here &lt;\/a&gt;\r\n            \r\n            &lt;\/div&gt;\r\n        &lt;\/div&gt;\r\n     {% endfor %}\r\n    \r\n    &lt;\/div&gt;\r\n \r\n    &lt;h1&gt;Hiring Blogs&lt;\/h1&gt;\r\n    &lt;div class=\"card-columns\" style=\"padding: 10px; margin: 20px;\"&gt;\r\n    {% for p in hiringcontent %}\r\n        &lt;div class=\"card\" style=\"width: 18rem; border:5px black solid\"&gt;\r\n            &lt;img class=\"card-img-top\" src=\"{{p.img}}\" alt=\"Card image cap\"&gt;\r\n           \r\n            &lt;div class=\"card-body\"&gt;\r\n            &lt;h5 class=\"card-title\"&gt;{{p.headline}}&lt;\/h5&gt;\r\n            &lt;a href=\"{{p.url}}\"&gt;For more info click here &lt;\/a&gt;\r\n            \r\n            &lt;\/div&gt;\r\n        &lt;\/div&gt;\r\n     {% endfor %}\r\n    \r\n    &lt;\/div&gt;\r\n \r\n    &lt;h1&gt;Covid Blogs&lt;\/h1&gt;\r\n    &lt;div class=\"card-columns\" style=\"padding: 10px; margin: 20px;\"&gt;\r\n    {% for p in covidcontent %}\r\n        &lt;div class=\"card\" style=\"width: 18rem; border:5px black solid\"&gt;\r\n            &lt;img class=\"card-img-top\" src=\"{{p.img}}\" alt=\"Card image cap\"&gt;\r\n           \r\n            &lt;div class=\"card-body\"&gt;\r\n            &lt;h5 class=\"card-title\"&gt;{{p.headline}}&lt;\/h5&gt;\r\n            &lt;a href=\"{{p.url}}\"&gt;For more info click here &lt;\/a&gt;\r\n            \r\n            &lt;\/div&gt;\r\n        &lt;\/div&gt;\r\n     {% endfor %}\r\n    \r\n    &lt;\/div&gt;\r\n \r\n{% endblock %}\r\n<\/pre>\n<p><strong>UpdatePython:<\/strong><\/p>\n<p>This function we are using feedparser to parse the contents from the url and store the information in the database. Feedparser is a python module to download and parse websites.<\/p>\n<p>For parsing we are using feedparser. Feedparser is a python module for scraping or downloading feeds.<\/p>\n<p>Steps involved:<\/p>\n<ul>\n<li>Install feedparser.<\/li>\n<li>Import feedparser.<\/li>\n<li>After that we have to provide the required url (for scraping) to the feedparser\u2019s parse function. We are storing all the parsed information in the \u2018url\u2019 variable.<\/li>\n<li>And then, we are just accessing the parsed content from the \u2018url\u2019 variable and storing the information in our database.<\/li>\n<li>For better understanding, you may visit the url of the websites and look for the content we need to store.<\/li>\n<li>To store the information in the database, we are creating an object of the particular model (HiringContent, ProgContent, CovidContent, or PyContent) and after storing information in all three attributes (url, images, and headline) we are saving the newly created object in the database using save() method.<\/li>\n<\/ul>\n<h3>Python Content Aggregator Output<\/h3>\n<p><a href=\"https:\/\/techvidvan.com\/tutorials\/wp-content\/uploads\/sites\/2\/2021\/05\/content-aggregator-output1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-80877\" src=\"https:\/\/techvidvan.com\/tutorials\/wp-content\/uploads\/sites\/2\/2021\/05\/content-aggregator-output1.png\" alt=\"content aggregator output 1\" width=\"1366\" height=\"726\" \/><\/a><\/p>\n<p><a href=\"https:\/\/techvidvan.com\/tutorials\/wp-content\/uploads\/sites\/2\/2021\/05\/content-aggregator-output2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-80878\" src=\"https:\/\/techvidvan.com\/tutorials\/wp-content\/uploads\/sites\/2\/2021\/05\/content-aggregator-output2.png\" alt=\"content aggregator output 2\" width=\"1366\" height=\"729\" \/><\/a><\/p>\n<p><a href=\"https:\/\/techvidvan.com\/tutorials\/wp-content\/uploads\/sites\/2\/2021\/05\/content-aggregator-output3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-80879\" src=\"https:\/\/techvidvan.com\/tutorials\/wp-content\/uploads\/sites\/2\/2021\/05\/content-aggregator-output3.png\" alt=\"content aggregator output 3\" width=\"1366\" height=\"729\" \/><\/a><\/p>\n<h3>templates<\/h3>\n<p><strong>links.html<\/strong><\/p>\n<p>This file contains all the bootstrap links and this file also includes navbar.html\u2019s code. All the html file in the project are extending this html page.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">{% load static %}\r\n&lt;html&gt;\r\n    &lt;head&gt;\r\n        &lt;title&gt;\r\n            TechVidvan Content Aggregator\r\n        &lt;\/title&gt;\r\n        &lt;link rel=\"stylesheet\" href=\"https:\/\/stackpath.bootstrapcdn.com\/bootstrap\/4.5.0\/css\/bootstrap.min.css\" integrity=\"sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk\" crossorigin=\"anonymous\"&gt;\r\n    &lt;\/head&gt;\r\n    &lt;body&gt;        \r\n        {% include 'app\/navbar.html' %}\r\n        {% block content %}   \r\n        {% endblock %}\r\n        &lt;br&gt;\r\n       \r\n        &lt;script src=\"https:\/\/code.jquery.com\/jquery-3.5.1.slim.min.js\" integrity=\"sha384-DfXdz2htPH0lsSSs5nCTpuj\/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj\" crossorigin=\"anonymous\"&gt;&lt;\/script&gt;\r\n    &lt;script src=\"https:\/\/cdn.jsdelivr.net\/npm\/popper.js@1.16.0\/dist\/umd\/popper.min.js\" integrity=\"sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo\" crossorigin=\"anonymous\"&gt;&lt;\/script&gt;\r\n    &lt;script src=\"https:\/\/stackpath.bootstrapcdn.com\/bootstrap\/4.5.0\/js\/bootstrap.min.js\" integrity=\"sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh\/kR0JKI\" crossorigin=\"anonymous\"&gt;&lt;\/script&gt;\r\n    &lt;\/body&gt;\r\n&lt;\/html&gt;\r\n<\/pre>\n<p><strong>navbar.html<\/strong><\/p>\n<p>This file has the code for the navigation bar of the project.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">{% load static %}\r\n \r\n&lt;style&gt;\r\n  .greet{\r\n    font-size: 18px;\r\n    color: #fff;\r\n    margin-right: 20px;\r\n  }\r\n&lt;\/style&gt;\r\n \r\n&lt;nav class=\"navbar navbar-expand-lg navbar-dark bg-dark\"&gt;\r\n  &lt;button class=\"navbar-toggler\" type=\"button\" data-toggle=\"collapse\" data-target=\"#navbarNav\" aria-controls=\"navbarNav\" 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=\"navbarNav\"&gt;\r\n \r\n    &lt;ul class=\"navbar-nav\"&gt;\r\n      \r\n      &lt;li class=\"nav-item active\"&gt;\r\n        &lt;a class=\"nav-link\" href=\"{% url 'home' %}\"&gt;Home&lt;\/a&gt;\r\n      &lt;\/li&gt;\r\n      &lt;\/li&gt;\r\n      &lt;li class=\"nav-item active\"&gt;\r\n \r\n      &lt;\/li&gt;\r\n      &lt;li class=\"nav-item\"&gt;\r\n        &lt;a class=\"nav-link\" href=\"{% url 'updatepython' %}\"&gt;Update Python News&lt;\/a&gt;\r\n      &lt;\/li&gt;\r\n \r\n      &lt;\/li&gt;\r\n      &lt;li class=\"nav-item\"&gt;\r\n        &lt;a class=\"nav-link\" href=\"{% url 'updateprog' %}\"&gt;Update Programming News&lt;\/a&gt;\r\n      &lt;\/li&gt;\r\n \r\n      &lt;\/li&gt;\r\n      &lt;li class=\"nav-item\"&gt;\r\n        &lt;a class=\"nav-link\" href=\"{% url 'updatehiring' %}\"&gt;Update Hiring News&lt;\/a&gt;\r\n      &lt;\/li&gt;\r\n \r\n      &lt;\/li&gt;\r\n      &lt;li class=\"nav-item\"&gt;\r\n        &lt;a class=\"nav-link\" href=\"{% url 'updatecovid' %}\"&gt;Update Covid News&lt;\/a&gt;\r\n      &lt;\/li&gt;\r\n    &lt;\/li&gt;\r\n    &lt;\/ul&gt;\r\n  &lt;\/div&gt;\r\n \r\n&lt;\/nav&gt;\r\n<\/pre>\n<h3>Summary<\/h3>\n<p>We have successfully developed Content Aggregator Python Django Project. We have used Bootstrap to design most of the html pages and Django framework for backend work.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this article, we are going to develop yet another interesting python django project Content Aggregator Content Aggregator When we look for something on the internet, we get a lot of search results and&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":80880,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1053],"tags":[3465,3466,483],"class_list":["post-80873","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python","tag-python-content-aggregator","tag-python-django-project","tag-python-project"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Create a Content Aggregator using Python Django - TechVidvan<\/title>\n<meta name=\"description\" content=\"Create a Content Aggregator using Python and Django. In this project we have collected and aggregated the data on required topics\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/techvidvan.com\/tutorials\/python-django-project-content-aggregator\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Create a Content Aggregator using Python Django - TechVidvan\" \/>\n<meta property=\"og:description\" content=\"Create a Content Aggregator using Python and Django. In this project we have collected and aggregated the data on required topics\" \/>\n<meta property=\"og:url\" content=\"https:\/\/techvidvan.com\/tutorials\/python-django-project-content-aggregator\/\" \/>\n<meta property=\"og:site_name\" content=\"TechVidvan\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/TechVidvan\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-05-25T05:15:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-03T10:01:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/techvidvan.com\/tutorials\/wp-content\/uploads\/2021\/05\/python-django-project-content-aggregator.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=\"TechVidvan Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@vidvantech\" \/>\n<meta name=\"twitter:site\" content=\"@vidvantech\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"TechVidvan Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Create a Content Aggregator using Python Django - TechVidvan","description":"Create a Content Aggregator using Python and Django. In this project we have collected and aggregated the data on required topics","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:\/\/techvidvan.com\/tutorials\/python-django-project-content-aggregator\/","og_locale":"en_US","og_type":"article","og_title":"Create a Content Aggregator using Python Django - TechVidvan","og_description":"Create a Content Aggregator using Python and Django. In this project we have collected and aggregated the data on required topics","og_url":"https:\/\/techvidvan.com\/tutorials\/python-django-project-content-aggregator\/","og_site_name":"TechVidvan","article_publisher":"https:\/\/www.facebook.com\/TechVidvan\/","article_published_time":"2021-05-25T05:15:34+00:00","article_modified_time":"2026-06-03T10:01:12+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/techvidvan.com\/tutorials\/wp-content\/uploads\/2021\/05\/python-django-project-content-aggregator.jpg","type":"image\/jpeg"}],"author":"TechVidvan Team","twitter_card":"summary_large_image","twitter_creator":"@vidvantech","twitter_site":"@vidvantech","twitter_misc":{"Written by":"TechVidvan Team","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/techvidvan.com\/tutorials\/python-django-project-content-aggregator\/#article","isPartOf":{"@id":"https:\/\/techvidvan.com\/tutorials\/python-django-project-content-aggregator\/"},"author":{"name":"TechVidvan Team","@id":"https:\/\/techvidvan.com\/tutorials\/#\/schema\/person\/e9c26e74dd3d87421f7ada9433b8cd22"},"headline":"Create a Content Aggregator using Python Django","datePublished":"2021-05-25T05:15:34+00:00","dateModified":"2026-06-03T10:01:12+00:00","mainEntityOfPage":{"@id":"https:\/\/techvidvan.com\/tutorials\/python-django-project-content-aggregator\/"},"wordCount":801,"commentCount":0,"publisher":{"@id":"https:\/\/techvidvan.com\/tutorials\/#organization"},"image":{"@id":"https:\/\/techvidvan.com\/tutorials\/python-django-project-content-aggregator\/#primaryimage"},"thumbnailUrl":"https:\/\/techvidvan.com\/tutorials\/wp-content\/uploads\/2021\/05\/python-django-project-content-aggregator.jpg","keywords":["python content aggregator","python django project","Python project"],"articleSection":["Python Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/techvidvan.com\/tutorials\/python-django-project-content-aggregator\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/techvidvan.com\/tutorials\/python-django-project-content-aggregator\/","url":"https:\/\/techvidvan.com\/tutorials\/python-django-project-content-aggregator\/","name":"Create a Content Aggregator using Python Django - TechVidvan","isPartOf":{"@id":"https:\/\/techvidvan.com\/tutorials\/#website"},"primaryImageOfPage":{"@id":"https:\/\/techvidvan.com\/tutorials\/python-django-project-content-aggregator\/#primaryimage"},"image":{"@id":"https:\/\/techvidvan.com\/tutorials\/python-django-project-content-aggregator\/#primaryimage"},"thumbnailUrl":"https:\/\/techvidvan.com\/tutorials\/wp-content\/uploads\/2021\/05\/python-django-project-content-aggregator.jpg","datePublished":"2021-05-25T05:15:34+00:00","dateModified":"2026-06-03T10:01:12+00:00","description":"Create a Content Aggregator using Python and Django. In this project we have collected and aggregated the data on required topics","breadcrumb":{"@id":"https:\/\/techvidvan.com\/tutorials\/python-django-project-content-aggregator\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/techvidvan.com\/tutorials\/python-django-project-content-aggregator\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/techvidvan.com\/tutorials\/python-django-project-content-aggregator\/#primaryimage","url":"https:\/\/techvidvan.com\/tutorials\/wp-content\/uploads\/2021\/05\/python-django-project-content-aggregator.jpg","contentUrl":"https:\/\/techvidvan.com\/tutorials\/wp-content\/uploads\/2021\/05\/python-django-project-content-aggregator.jpg","width":1200,"height":628,"caption":"python django project content aggregator"},{"@type":"BreadcrumbList","@id":"https:\/\/techvidvan.com\/tutorials\/python-django-project-content-aggregator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/techvidvan.com\/tutorials\/"},{"@type":"ListItem","position":2,"name":"Create a Content Aggregator using Python Django"}]},{"@type":"WebSite","@id":"https:\/\/techvidvan.com\/tutorials\/#website","url":"https:\/\/techvidvan.com\/tutorials\/","name":"TechVidvan Blogs","description":"","publisher":{"@id":"https:\/\/techvidvan.com\/tutorials\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/techvidvan.com\/tutorials\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/techvidvan.com\/tutorials\/#organization","name":"TechVidvan","url":"https:\/\/techvidvan.com\/tutorials\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/techvidvan.com\/tutorials\/#\/schema\/logo\/image\/","url":"https:\/\/techvidvan.com\/tutorials\/wp-content\/uploads\/2024\/03\/techvidvan-logo-200x50-1.webp","contentUrl":"https:\/\/techvidvan.com\/tutorials\/wp-content\/uploads\/2024\/03\/techvidvan-logo-200x50-1.webp","width":200,"height":50,"caption":"TechVidvan"},"image":{"@id":"https:\/\/techvidvan.com\/tutorials\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/TechVidvan\/","https:\/\/x.com\/vidvantech"]},{"@type":"Person","@id":"https:\/\/techvidvan.com\/tutorials\/#\/schema\/person\/e9c26e74dd3d87421f7ada9433b8cd22","name":"TechVidvan Team","description":"The TechVidvan Team delivers practical, beginner-friendly tutorials on programming, Java, Python, C++, DSA, AI, ML, data Science, Android, Flutter, MERN, Web Development, and technology. Our experts are here to help you upskill and excel in today\u2019s tech industry."}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/techvidvan.com\/tutorials\/wp-json\/wp\/v2\/posts\/80873","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/techvidvan.com\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/techvidvan.com\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/techvidvan.com\/tutorials\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/techvidvan.com\/tutorials\/wp-json\/wp\/v2\/comments?post=80873"}],"version-history":[{"count":2,"href":"https:\/\/techvidvan.com\/tutorials\/wp-json\/wp\/v2\/posts\/80873\/revisions"}],"predecessor-version":[{"id":448091,"href":"https:\/\/techvidvan.com\/tutorials\/wp-json\/wp\/v2\/posts\/80873\/revisions\/448091"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/techvidvan.com\/tutorials\/wp-json\/wp\/v2\/media\/80880"}],"wp:attachment":[{"href":"https:\/\/techvidvan.com\/tutorials\/wp-json\/wp\/v2\/media?parent=80873"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/techvidvan.com\/tutorials\/wp-json\/wp\/v2\/categories?post=80873"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/techvidvan.com\/tutorials\/wp-json\/wp\/v2\/tags?post=80873"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}