Open In App

Create Word Counter App using Django

Last Updated : 15 May, 2025
Suggest changes
Share
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