Open In App

Create Word Counter App using Django

Last Updated : 15 May, 2025
Comments
Improve
Suggest changes
Like Article
Like
Report

Our task is to build a simple Django application that counts the number of words in a given text. This is a great beginner project if you have some basic knowledge of Django.

Refer to the below article to know about basics of Django.

Step 1: Create the Word Counting Logic in Views

First, we create a function called counter in views.py which will handle the logic for counting words:

Python
from django.shortcuts import render

def counter(request):
    if request.method == 'POST':

        text = request.POST['texttocount']

        if text != '':
            word = len(text.split())
            i = True
            return render(request, 'counter.html',
                          {'word': word,
                          'text': text,
                          'i': i, 
                          'on': 'active'
            })

        else:
            return render(request, 'counter.html', {'on': 'active'})
    else:
        return render(request, 'counter.html', {'on': 'active'})

 Explanation:

  • When the user submits text via POST, we check if the input is not empty.
  • We then split the text by spaces and count the resulting words.
  • If successful, we pass the word count and original text back to the template.
  • On GET requests or empty input, we simply render the form without results.

Step 2: Configure URL Patterns

In your app's urls.py, map the URL /counter to your counter view:

Python
from django.urls import path
from . import views
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('counter',views.counter, name='counter'),
]

Then include your app URLs in the main project urls.py:

Python
from django.contrib import admin
from django.urls import path, include
from django.views.generic import RedirectView

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', RedirectView.as_view(url='counter', permanent=False)),  # Redirect root to /counter
    path('', include('yourappname.urls')),  # Replace yourappname with your actual app name
]

Step 3: Create the HTML Template

Create a file called counter.html inside your app’s templates folder and add the following code:

HTML
{% if i %}
<div class="mb-2" style="border-style: groove; border-radius: 10px;">
  <div class="card-header">
    <p style="font-size: 20px;">{{ word }} Word{{ word|pluralize }} in the text</p>
  </div>
</div>
{% endif %}

<div class="col-12 pb-3" style="background-color: #c2d6d6; border: 2px groove; border-radius: 10px;">
  <form action="counter" method="POST">
    {% csrf_token %}
    <div class="form-group">
      <label for="text1">Paste your text here</label>
      <textarea name="texttocount" id="text1" rows="8" style="background-color: #f0f5f5;" class="form-control" placeholder="Enter text to count words">{{ text }}</textarea>
    </div>
    
    <div class="text-center">
      <!-- Ads or other content can go here -->
    </div>

    <div class="form-group text-center">
      <button type="submit" class="btn btn-primary w-25">Run Counter</button>
    </div>
  </form>
</div>

Notes:

  • The {% csrf_token %} tag is essential for POST requests to pass Django’s CSRF protection.
  • We conditionally display the word count only when the counting process has succeeded (i is true).
  • {{ word|pluralize }} adds an “s” when the word count is more than one for proper grammar.

Step 4: Run Your Application

Make sure your Django server is running:

python manage.py runserver

Output:

TemplateDoesNotExist at /counter

Next Article

Similar Reads