<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kaushal Patel</title>
    <description>The latest articles on DEV Community by Kaushal Patel (@mrkaushal).</description>
    <link>https://dev.to/mrkaushal</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F539386%2Ff0055d7d-7aea-44f2-9037-ddd8c1e2b327.jpg</url>
      <title>DEV Community: Kaushal Patel</title>
      <link>https://dev.to/mrkaushal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mrkaushal"/>
    <language>en</language>
    <item>
      <title>Setting Up CELERY in Django</title>
      <dc:creator>Kaushal Patel</dc:creator>
      <pubDate>Fri, 03 Jun 2022 09:16:57 +0000</pubDate>
      <link>https://dev.to/mrkaushal/setting-up-celery-in-django-143g</link>
      <guid>https://dev.to/mrkaushal/setting-up-celery-in-django-143g</guid>
      <description>&lt;h2&gt;
  
  
  What is CELERY
&lt;/h2&gt;

&lt;p&gt;Celery is an open source asynchronous task queue or job queue which is based on distributed message passing. While it supports scheduling, its focus is on operations in real time.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Celery 5.0.x supports Django 1.11 LTS or newer versions. Please use Celery 4.4.x for versions older than Django 1.11.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; First You need to install celery using pip package manager&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install celery
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Change Settings.py file and add below configuration details at end of file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CELERY_BROKER_URL = 'redis://127.0.0.1:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Asia/Kolkata' # Configure Time zone based on your webserver
CELERY_RESULT_BACKEND = 'django-db' 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Install redis using below link if you are using windows &lt;br&gt;
&lt;a href="https://github.com/tporadowski/redis/releases"&gt;Download for windows&lt;/a&gt;&lt;br&gt;
&lt;a href="https://redis.io/docs/getting-started/installation/install-redis-on-linux/"&gt;Download for Linux&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt; Create &lt;strong&gt;celery.py&lt;/strong&gt; file in project folder&lt;br&gt;
eg:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- celery_with_django/
  - manage.py
  - celery_with_django/
    - __init__.py
    - settings.py
    - urls.py
    - celery.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 5:&lt;/strong&gt; Add following code for simple testing celery&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from __future__ import absolute_import, unicode_literals
import os

from celery import Celery
from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'PROJECT_NAME.settings')

app = Celery('celery_with_django')
app.conf.enable_utc = False

app.conf.update(timezone = 'Asia/Kolkata') # Configure Time zone based on your webserver

app.config_from_object(settings, namespace='CELERY')


app.autodiscover_tasks()

@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 6:&lt;/strong&gt; Then create App using following code and add tasks.py file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- celery_with_django/
  - manage.py
  - celery_with_django/
    - __init__.py
    - settings.py
    - urls.py
    - celery.py
  - main_app
    - __init__.py
    - apps.py
    - admin.py
    - tests.py
    - tasks.py
    - models.py
    - views.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 7:&lt;/strong&gt; Add Below code Into the &lt;strong&gt;tasks.py&lt;/strong&gt; file it it will create a shared task which will print 0 to 10&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from celery import shared_task

@shared_task(bind=True)
def test_func(self):
    #operations
    for i in range(10):
        print(i)
    return "Done"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 8:&lt;/strong&gt; Then change the &lt;strong&gt;&lt;strong&gt;init&lt;/strong&gt;.py&lt;/strong&gt; file in main_app&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .celery import app as celery_app

__all__ = ('celery_app',)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 9:&lt;/strong&gt; Then call the &lt;strong&gt;test_func()&lt;/strong&gt; from the &lt;strong&gt;views.py&lt;/strong&gt; file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from django.http.response import HttpResponse
from django.shortcuts import render
from .tasks import test_func

# Create your views here.
def test(request):
    test_func.delay()
    return HttpResponse("Done")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;If you are using django inbuilt &lt;strong&gt;user modal&lt;/strong&gt; install the other package for presenting the status in admin panel&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install django-celery-results
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 10:&lt;/strong&gt; Then Create Super using command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python manage.py createsuperuser
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 11:&lt;/strong&gt; Then Start Server and celery worker&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Starting Django Sever
python manage.py runserver

# Staring Celery Worker
celery -A celery_with_django.celery worker --pool=solo -l INFO
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Your Task status will look like below&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fux99hiz7rx4klvjv89k6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fux99hiz7rx4klvjv89k6.png" alt="DjangoAdmin" width="800" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ecourge.com"&gt;Ecourge Innovations&lt;/a&gt;&lt;/p&gt;

</description>
      <category>django</category>
      <category>python</category>
      <category>webdev</category>
      <category>celery</category>
    </item>
    <item>
      <title>Top 5 Creative Portfolio Website</title>
      <dc:creator>Kaushal Patel</dc:creator>
      <pubDate>Fri, 24 Sep 2021 07:09:21 +0000</pubDate>
      <link>https://dev.to/mrkaushal/top-5-creative-portfolio-website-2ak9</link>
      <guid>https://dev.to/mrkaushal/top-5-creative-portfolio-website-2ak9</guid>
      <description>&lt;h2&gt;
  
  
  Website 01
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsy7zxkza8o74vz2xs1l9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsy7zxkza8o74vz2xs1l9.png" alt="Web 01" width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Live Demo&lt;/th&gt;
&lt;th&gt;Source Code&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://bhavya.dev/"&gt;Demo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/BhavyaCodes/portfolio"&gt;Source Code&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Website 02
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz1kuukorn9h17v7eaupl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz1kuukorn9h17v7eaupl.png" alt="Web 02" width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Live Demo&lt;/th&gt;
&lt;th&gt;Source Code&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://ahsankhan.me/"&gt;Demo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/ahsankhan26/ahsankhan26.github.io"&gt;Source Code&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Website 03
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyydq9ht3cu9iaq4v46ja.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyydq9ht3cu9iaq4v46ja.png" alt="Web 03" width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Live Demo&lt;/th&gt;
&lt;th&gt;Source Code&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://cristianofilho.com.br/"&gt;Demo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/CristianoFIlho/cristianofilho.github.io"&gt;Source Code&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Website 04
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flcxuu617pgy99w8xc0sl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flcxuu617pgy99w8xc0sl.png" alt="Web 04" width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Live Demo&lt;/th&gt;
&lt;th&gt;Source Code&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://yashitanamdeo.github.io/"&gt;Demo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/yashitanamdeo/yashitanamdeo.github.io"&gt;Source Code&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Website 05
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuzitjh4r90e0heeb6ue6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuzitjh4r90e0heeb6ue6.png" alt="Web 05" width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Live Demo&lt;/th&gt;
&lt;th&gt;Source Code&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://victor-aremu.firebaseapp.com/"&gt;Demo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://victor-aremu.firebaseapp.com"&gt;Source Code&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://ecourge.com"&gt;Ecourge Innovations&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Configure Django on a Linux shared hosting account (cPanel)</title>
      <dc:creator>Kaushal Patel</dc:creator>
      <pubDate>Fri, 24 Sep 2021 04:30:42 +0000</pubDate>
      <link>https://dev.to/mrkaushal/configure-django-on-a-linux-shared-hosting-account-cpanel-46a6</link>
      <guid>https://dev.to/mrkaushal/configure-django-on-a-linux-shared-hosting-account-cpanel-46a6</guid>
      <description>&lt;h2&gt;
  
  
  Step 1: Create a Python application in cPanel
&lt;/h2&gt;

&lt;p&gt;The first step is to create a Python application within cPanel that will host the Django project. To do this, follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Log in to cPanel.
&lt;/li&gt;
&lt;li&gt;In the &lt;strong&gt;SOFTWARE&lt;/strong&gt; section of the cPanel home screen, click &lt;strong&gt;Setup Python App&lt;/strong&gt;:
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftj61kdf4qn8ci7md848x.png" alt="Setup Python App" width="800" height="130"&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;CREATE APPLICATION&lt;/strong&gt; and the following application form appears:&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1dwxoqjqy544rm9z35hd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1dwxoqjqy544rm9z35hd.png" alt="Create Python App" width="800" height="469"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the Python version list box, select &lt;strong&gt;3.8.1&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the &lt;strong&gt;Application root&lt;/strong&gt; text box, type myapp.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the &lt;strong&gt;Application URL&lt;/strong&gt; list box, select the domain. Leave the rest of the URL blank.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Leave the &lt;strong&gt;Application startup file&lt;/strong&gt; text box and &lt;strong&gt;Application Entry point&lt;/strong&gt; text box blank.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When these text boxes are blank, cPanel automatically creates a passenger_wsgi.py startup file and default application object for you.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the &lt;strong&gt;Passenger log file&lt;/strong&gt; text box, you can optionally specify a log file for the application.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the top right corner of the page, click &lt;strong&gt;CREATE&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;At the top of the page, next to &lt;strong&gt;Enter to the virtual environment. To enter to virtual environment, run the command&lt;/strong&gt;, copy the command. You will need this information in the following procedure.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step 2: Configure the Django project
&lt;/h2&gt;

&lt;p&gt;After you create the Python application in cPanel, you are ready to do the following tasks at the command line:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install Django.&lt;/li&gt;
&lt;li&gt;Create and configure the Django project.&lt;/li&gt;
&lt;li&gt;Configure Passenger to work with the Django project.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To do this, follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Log in to your account using SSH.&lt;/li&gt;
&lt;li&gt;Activate the virtual environment, using the command you noted in step 10 above. For example: (Replace username with your own)
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;source /home/username/virtualenv/myapp/3.8/bin/activate &amp;amp;&amp;amp; cd /home/username/myapp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;The command prompt now starts with (myapp:3.8) to indicate that you are working in the myapp virtual environment with Python 3.8. All of the following commands in this article assume that you are working in the Python virtual environment. If you log out of your SSH session (or deactivate the virtual environment by using the deactivate command), make sure you reactivate the virtual environment before following any of the steps below.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;span&gt;3.&lt;/span&gt; To install Django, type the following commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd ~
pip install django==3.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;span&gt;4.&lt;/span&gt; To create a Django project, type the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;django-admin startproject myapp ~/myapp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;span&gt;5.&lt;/span&gt; To create directories for the static project files, type the following commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir -p ~/myapp/templates/static_pages
mkdir ~/myapp/static_files
mkdir ~/myapp/static_media
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;span&gt;6.&lt;/span&gt; Use a text editor to open the ~/myapp/myapp/settings.py file, and then make the following changes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Locate the &lt;strong&gt;ALLOWED_HOSTS&lt;/strong&gt; line, and then modify it as follows. Replace &lt;strong&gt;example.com&lt;/strong&gt; with your own domain name:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ALLOWED_HOSTS = ['example.com']
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Locate the &lt;strong&gt;TEMPLATES&lt;/strong&gt; block, and then modify it as follows:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Locate the &lt;strong&gt;STATIC_URL&lt;/strong&gt; line, and then add the following lines beneath it:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static_files')

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, "static_media")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;span&gt;7.&lt;/span&gt; Use a text editor to open the ~/myapp/myapp/urls.py file. Delete all of the existing text, and then copy the following text into the file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from django.conf.urls import url
from django.views.generic.base import TemplateView

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^$', TemplateView.as_view(template_name='static_pages/index.html'), name='home'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;span&gt;8.&lt;/span&gt; Use a text editor to open the ~/myapp/passenger_wsgi.py file. Delete all of the existing text, and then copy the following text into the file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import os
import sys

import django.core.handlers.wsgi
from django.core.wsgi import get_wsgi_application

# Set up paths and environment variables
sys.path.append(os.getcwd())
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'

# Set script name for the PATH_INFO fix below
SCRIPT_NAME = os.getcwd()

class PassengerPathInfoFix(object):
    """
        Sets PATH_INFO from REQUEST_URI because Passenger doesn't provide it.
    """
    def __init__(self, app):
        self.app = app

    def __call__(self, environ, start_response):
        from urllib.parse import unquote
        environ['SCRIPT_NAME'] = SCRIPT_NAME
        request_uri = unquote(environ['REQUEST_URI'])
        script_name = unquote(environ.get('SCRIPT_NAME', ''))
        offset = request_uri.startswith(script_name) and len(environ['SCRIPT_NAME']) or 0
        environ['PATH_INFO'] = request_uri[offset:].split('?', 1)[0]
        return self.app(environ, start_response)

# Set the application
application = get_wsgi_application()
application = PassengerPathInfoFix(application)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;span&gt;9.&lt;/span&gt; Use a text editor to create a basic index.html file in the &lt;strong&gt;&lt;em&gt;~/myapp/templates/static_pages&lt;/em&gt;&lt;/strong&gt; directory. The file can be as simple as a text file that says Hello world.&lt;br&gt;
&lt;span&gt;10.&lt;/span&gt; Type the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python ~/myapp/manage.py migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;span&gt;11.&lt;/span&gt; Set up the superuser account:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type the following command:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python ~/myapp/manage.py createsuperuser
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;At the &lt;strong&gt;Username&lt;/strong&gt; prompt, type the administrator username, and then press Enter.&lt;/li&gt;
&lt;li&gt;At the &lt;strong&gt;Email address&lt;/strong&gt; prompt, type the administrator e-mail address, and then press Enter.&lt;/li&gt;
&lt;li&gt;At the &lt;strong&gt;Password&lt;/strong&gt; prompt, type the administrator password, and then press Enter.
&lt;span&gt;12.&lt;/span&gt;Type the following command to collect the static files:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python ~/myapp/manage.py collectstatic
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;If you are asked if you want to overwrite existing files, type yes and then press Enter.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;span&gt;13.&lt;/span&gt; In cPanel, restart the Python application:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log in to cPanel.&lt;/li&gt;
&lt;li&gt;In the SOFTWARE section of the cPanel home screen, click Setup Python App.&lt;/li&gt;
&lt;li&gt;Under WEB APPLICATIONS, locate the myapp application, and then click the Restart icon.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;span&gt;14.&lt;/span&gt; Test the Django site:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use your browser to go to &lt;a href="http://www.**example.com**"&gt;http://www.**example.com**&lt;/a&gt;, where &lt;strong&gt;example.com&lt;/strong&gt; represents your domain name. The index.html file should load.&lt;/li&gt;
&lt;li&gt;Use your browser to go to &lt;a href="http://www.**example.com**/admin"&gt;http://www.**example.com**/admin&lt;/a&gt;, where &lt;strong&gt;example.com&lt;/strong&gt; represents your domain name. You should see the Django administration login page. To log in, use the superuser credentials that you created earlier.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;If the web site does not appear in your browser, try running the passenger_wsgi.py file manually. To do this, type the following command:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python ~/myapp/passenger_wsgi.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;There should not be any text output to the console when you run this file. If there are any errors, check the syntax in the configuration files.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://ecourge.com"&gt;Ecourge Innovations&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cpanel</category>
      <category>django</category>
      <category>hosting</category>
      <category>djangohosting</category>
    </item>
    <item>
      <title>Jekyll with Netlify CMS — Tutorial</title>
      <dc:creator>Kaushal Patel</dc:creator>
      <pubDate>Thu, 23 Sep 2021 16:38:42 +0000</pubDate>
      <link>https://dev.to/mrkaushal/jekyll-with-netlify-cms-tutorial-54ii</link>
      <guid>https://dev.to/mrkaushal/jekyll-with-netlify-cms-tutorial-54ii</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;This section will help you integrate Netlify CMS with a new or existing Jekyll project.&lt;br&gt;
Jekyll is a blog-aware static site generator built with Ruby. Github Pages are powered by Jekyll, making it a popular choice for developer blogs and project pages.&lt;br&gt;
If you’re starting a new project, the fastest route to publishing on a Jekyll website with Netlify CMS is to deploy a template on Netlify.&lt;/p&gt;
&lt;h2&gt;
  
  
  This guide aims to be helpful for users in the following situations.
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;You have an existing Jekyll project and you want to add Netlify CMS&lt;/li&gt;
&lt;li&gt;You have a Jekyll project with Netlify CMS integrated and want to make updates beyond adding content&lt;/li&gt;
&lt;li&gt;You are starting a new Jekyll + Netlify CMS project and you want to start from scratch so you know how everything fits together.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;
  
  
  Setup
&lt;/h1&gt;
&lt;h2&gt;
  
  
  Create a Jekyll Site
&lt;/h2&gt;

&lt;p&gt;This guide will use the blog you get if you follow the really excellent official Jekyll step by step tutorial as a starting point. If you’re new to Jekyll — I recommended you start by following the tutorial so you know your way around your new blog.&lt;/p&gt;
&lt;h2&gt;
  
  
  Hosting and Serving
&lt;/h2&gt;

&lt;p&gt;You have lots of options for hosting and serving your project, but to for the sake of simplicity, this guide will assume you follow this guide to create a remote git repository on Github and give Netlify access to build and serve the project when you push changes.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Not Stop Here?
&lt;/h2&gt;

&lt;p&gt;At this point, you have a perfectly good Jekyll site published on the web. Congratulations! It looks great, and to update the content on your site you just open your favorite text editor, create or edit a markdown file, then commit your changes and push them to your remote git repository. But maybe you are tired of looking at a markdown, or you find yourself wanting to update your blog from computers without your favorite text editor and tools installed, or you want to make it easier for less technical individuals to contribute to your blog. This is where Netlify CMS comes in.&lt;/p&gt;
&lt;h1&gt;
  
  
  Add Netlify CMS
&lt;/h1&gt;
&lt;h2&gt;
  
  
  Add admin/index.html
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Create a directory called admin in the root directory of your Jekyll project. Jekyll will copy this directory to the _site generated when the jekyll build command is run.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir admin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Move into the admin directory and create the file index.html
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd admin &amp;amp;&amp;amp; touch index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Copy the following HTML into index.html.&lt;/li&gt;
&lt;li&gt;Run Jekyll server and open &lt;a href="http://127.0.0.1:4000/admin"&gt;http://127.0.0.1:4000/admin&lt;/a&gt; in your browser. You should see a page with the following error message.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Error loading the CMS configuration
Config Errors:
Error: Failed to load config.yml (404)
Check your config.yml file.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Add config.yml
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;As indicated in the error message above, Netlify CMS requires a configuration file. When it runs, netlify-cms.js it will look for config.yml at the root of the admin directory. Let's add it now.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;touch config.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Go back to your browser and you should see the following errors.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Error loading the CMS configuration
Config Errors:
config should have required property 'backend'
config should have required property 'collections'
config should have required property 'media_folder'
config should have required property 'media_library'
config should match some schema in anyOf
Check your config.yml file.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Before we really dig into the configuration for our project, we’ll start by setting the minimum configuration to satisfy Netlify CMS.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;For the backend property we'll use the test-repo backend. It will let us see the cms interface without connecting to a git repository.&lt;/li&gt;
&lt;li&gt;The media_folder property should be set to the path where you want the cms to save images. We'll follow the advice of the jekyll docs and create an assets/ directory. Setting the media_folder property will take care of the media_library property error as well.&lt;/li&gt;
&lt;li&gt;The collections property requires an array of collection objects. We'll start with a collection with only the property name defined to see what else is required.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Copy and paste the following into config.yml&lt;/p&gt;

&lt;p&gt;Back in the browser, you should see a new set of errors.&lt;/p&gt;

&lt;p&gt;Error loading the CMS configuration&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Config Errors:
'collections[0]' should have required property 'label'
'collections[0]' should have required property 'files'
'collections[0]' should have required property 'folder'
'collections[0]' should have required property 'fields'
'collections[0]' should match exactly one schema in oneOf
Check your config.yml file.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Great, now we’re getting somewhere. Netlify CMS is telling us we need to define some properties of collection.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The label property is the string used to identify the collection in the cms UI. We'll set it to "Blog"&lt;/li&gt;
&lt;li&gt;folder should be set to the directory containing the files we want the cms to be able to create and edit. We'll start with "_posts/"&lt;/li&gt;
&lt;li&gt;The fields property requires an array of field objects. We'll start with a collection with only the property name defined. Setting the fields property will take care of the files property error as well. Update config.yml like so.
And in the browser, you should see. Netlify CMS signup.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Log in and you should see. Empty blog collection.&lt;/p&gt;

&lt;p&gt;Awesome, the CMS is running without errors! Great, but you might have noticed the CMS isn’t displaying data from the three markdown files in the _posts/ directory. The reason is test-repo uses local browser storage and doesn't have access to your file system. In fact, none of the Netlify CMS backends can interact with local git repositories. This is a common point of confusion and bears repeating: NETLIFY CMS CANNOT INTERACT WITH LOCAL GIT REPOSITORIES.&lt;/p&gt;

&lt;p&gt;Next, we’ll be setting up the Backend and Authentication so you can start updating content on your Jekyll site.&lt;/p&gt;

&lt;h2&gt;
  
  
  Backend and Authentication
&lt;/h2&gt;

&lt;p&gt;You have lots of options for giving Netlify CMS permission to push commits to your Jekyll blog repository. In this guide — we’re using Netlify’s Identity service.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replace the test-repo backend configuration git-gateway
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# config.yml
backend:
  name: git-gateway
  branch: master # Branch to update (optional; defaults to master)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;In your browser, go to &lt;a href="https://app.netlify.com/sites/%7BYOUR_PROJECT_NAME%7D/settings/identity"&gt;https://app.netlify.com/sites/{YOUR_PROJECT_NAME}/settings/identity&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Click Enable Identity&lt;/li&gt;
&lt;li&gt;Scroll down to the Registration section and add external OAuth providers (optional)&lt;/li&gt;
&lt;li&gt;Scroll down to the Services section and click Enable Git Gateway&lt;/li&gt;
&lt;li&gt;Make the following changes to your Jekyll project in admin/index.html and _layouts/default.html. You can read more about the purpose of these changes here&lt;/li&gt;
&lt;li&gt;Add the netlify-identity-widget.js script to the head of admin/index.html and _layouts/default.html
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;script src="https://identity.netlify.com/v1/netlify-identity-widget.js"&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the following redirect script to the bottom of the body in _layouts/default.html&lt;/p&gt;

&lt;p&gt;Now in the browser, you should see a modal asking for the URL of your Netlify site.&lt;/p&gt;

&lt;p&gt;Once you’ve set it you should see a Signup/Login modal.&lt;/p&gt;

&lt;p&gt;And once you’ve logged in you should see the CMS UI, now populated with the Jekyll blog posts you created in the Jekyll tutorial.&lt;/p&gt;

&lt;p&gt;Also note, when using the git-gateway backend you'll be redirected to your live site when you login, meaning if you want to test your changes you'll need to push to your remote repository.&lt;/p&gt;

&lt;p&gt;Click on one of the posts and you’ll see the edit view.&lt;/p&gt;

&lt;p&gt;Amazing! But the editor is missing some of the frontmatter fields in your markdown file, specifically the layout and author fields.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;layout: post
author: jill
title: Bananas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also, we still can’t create new blog posts from the CMS. We’ll address these issues and others in the next section.&lt;/p&gt;

&lt;h1&gt;
  
  
  Jekyll Blog Configuration
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Blog Collection
&lt;/h2&gt;

&lt;p&gt;We’ll start by updating the blog collection. Blogging is baked into Jekyll, and the _posts/ directory uses some special conventions we'll need to keep in mind as we configure Netlify CMS. Copy and paste the following into your config.yml.&lt;/p&gt;

&lt;p&gt;A few things to note.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;With create: true set you'll be able to create new posts&lt;/li&gt;
&lt;li&gt;We set the slug to 'year-month-day-slug' because Jekyll requires this format for blog posts. year, month, and day will be extracted from the date field, and slug will be generated from the title field.&lt;/li&gt;
&lt;li&gt;We added editor configuration with a field preview: false. This will eliminate the preview pane. Because Jekyll uses Liquid templates, there currently isn't a good way to provide a preview of pages as you update the content.&lt;/li&gt;
&lt;li&gt;The layout field default is set to post so Jekyll knows to use _layouts/post.html when it renders a post. This field is hidden because we want all posts to use the same layout.&lt;/li&gt;
&lt;li&gt;The date and title field will be used by the slug - as noted above, Jekyll relies on the filename a post's publish date, but - - Netlify CMS does not pull date information from the filename and requires a frontmatter date field. Note Changing the date or title fields in Netlify CMS will not update the filename. This has two implications...&lt;/li&gt;
&lt;li&gt;If you change the date or title fields in Netlify CMS, Jekyll won't notice&lt;/li&gt;
&lt;li&gt;You don’t necessarily need to change the date and title fields for existing posts, but if you don't the date in the filenames and frontmatter will disagree in a way that might be confusing&lt;/li&gt;
&lt;li&gt;If you want to avoid these issues, use a regular Jekyll collection instead of the special _posts directory&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Author Collection
&lt;/h1&gt;

&lt;p&gt;In addition to _posts, the Jekyll tutorial blog includes a collection of authors in the _authors directory. Before we can configure Netlify CMS to work with the author's collection, we'll need to make a couple of tweaks to our Jekyll blog. Here's the front matter for one of the authors.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;short_name: jill
name: Jill Smith
position: Chief Editor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;name has special meaning as a unique identifier in Netlify CMS, but as set up now our Jekyll blog is using short_name as the unique identifier for authors. For each author, update the front matter like so.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name: jill
display_name: Jill Smith
position: Chief Editor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;then update _layouts/author.html and staff.html accordingly.&lt;/p&gt;

&lt;p&gt;Next, copy and paste the following into the collections array in config.yml below the blog collection.&lt;/p&gt;

&lt;p&gt;Now that we have the author's collection configured, we can add an author field to the blog collection. We'll use the relation widget to define the relationship between blog posts and authors.&lt;/p&gt;

&lt;p&gt;With that configuration added, you should be able to select the author for a post from a dropdown.&lt;/p&gt;

&lt;h1&gt;
  
  
  About Page
&lt;/h1&gt;

&lt;p&gt;Our Jekyll blog includes an About page. It would nice to be able to edit that page just like we can edit our blog and author pages. Netlify CMS provides file collections to solve this problem.&lt;/p&gt;

&lt;p&gt;Copy and paste the following into the collections array in config.yml&lt;/p&gt;

&lt;h1&gt;
  
  
  Navigation
&lt;/h1&gt;

&lt;p&gt;The last aspect of our Jekyll blog we might want to bring under the control of Netlify CMS is our Navigation menu. Our Jekyll tutorial blog has a file _data/navigation.yml that defines the links rendered by _includes/navigation.yml. It looks like this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# _data/navigation.yml
- name: Home
  link: /
- name: About
  link: /about.html
- name: Blog
  link: /blog.html
- name: Staff
  link: /staff.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To make this file editable with Netlify CMS, we’ll need to make one minor tweak. The issue is this file contains a YAML array at the top level, but Netlify CMS is designed to work with YAML objects. Update _data/navigation.yml so it looks like so.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# _data/navigation.yml
items:
  - name: Home
    link: /
  - name: About
    link: /about.html
  - name: Blog
    link: /blog.html
  - name: Staff
    link: /staff.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You’ll need to update _includes/navigation.html accordingly. for item in site.data.navigation should be changed to for item in site.data.navigation.items. When you're done, the nav html should look like this.&lt;/p&gt;

&lt;p&gt;Finally, add the following to the collections array in config.yml&lt;/p&gt;

&lt;p&gt;Now you can add, rename, and rearrange the navigation items on your blog.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ecourge.com"&gt;Ecourge Innovations&lt;/a&gt;&lt;/p&gt;

</description>
      <category>headless</category>
      <category>cms</category>
      <category>jekyll</category>
      <category>netlify</category>
    </item>
  </channel>
</rss>
