Open In App

Render HTML Forms (GET & POST) in Django

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

Django is often called a "Batteries Included Framework" because it provides built-in settings and features that help developers build websites rapidly and efficiently. One of the essential components in web development is handling HTML forms, a way for users to send data to the server for processing, such as saving it to a database or retrieving information.

What is an HTML Form?

An HTML form is a collection of elements wrapped inside <form>...</form> tags. These elements allow visitors to input text, select options, manipulate controls, and submit data to the server. The server then processes this data, often involving database operations or other logic. Django fully supports all types of HTML forms and simplifies the rendering and processing of form data using views.

To know more about HTML forms, visit HTML | form Tag.

Django Forms vs. HTML Forms

Django provides a powerful feature called Django Forms that abstracts HTML forms and their handling. It’s similar in concept to Django Models, letting you define forms as Python classes. However, before diving into Django Forms, it’s important to understand the basics of GET and POST methods in standard HTML forms.

Understanding GET and POST Methods

1. GET: This method appends form data to the URL as query parameters. For example, when you search in the Django documentation, the URL might look like:

https://docs.djangoproject.com/search/?q=forms&release=1

2. POST: This method sends the form data in the body of the HTTP request. POST is used when the request modifies data on the server, like updating a database.

Example: Rendering a Simple HTML Form in Django

Let’s illustrate rendering forms in Django with a simple example. Suppose you have a Django project named geeksforgeeks with an app called geeks.

Step 1: Create the HTML Form

Create a template file home.html inside geeks/templates/ and add the following:

HTML
<form action="" method="get">
    <label for="your_name">Your name: </label>
    <input id="your_name" type="text" name="your_name">
    <input type="submit" value="OK">
</form>

This form will send data using the GET method when submitted.

Step 2: Setup URL Configuration

In your app’s urls.py (geeks/urls.py), set up the URL pattern:

Python
from django.urls import path
from .views import home_view

urlpatterns = [
    path('', home_view),
]

Step 3: Create the View

In views.py (geeks/views.py), create the view to render the form:

Python
from django.shortcuts import render

def home_view(request):
    return render(request, "home.html")

Step 4: Run the Server and Test

Run your Django server:

python manage.py runserver

Handling GET Request Data in Views

When you submit the form, the data will be appended to the URL. To access this data in the view, you can use request.GET:

Python
from django.shortcuts import render

def home_view(request):
    print(request.GET)  # Prints the submitted data as a QueryDict
    return render(request, "home.html")

If you enter a name and submit the form, you will see the data printed in your terminal, like:

GETmethod
GET Request

request.GET returns a query dictionary that one can access like any other python dictionary and finally use its data for applying some logic.

Handling POST Requests in Django Forms

To use POST instead of GET, modify your form in home.html:

HTML
<form action="" method="POST">
    {% csrf_token %}
    <label for="your_name">Your name: </label>
    <input id="your_name" type="text" name="your_name">
    <input type="submit" value="OK">
</form>

Note: Django requires the {% csrf_token %} template tag inside all POST forms for security to prevent Cross-Site Request Forgery attacks.

Update the View to Handle POST Data

Modify your view to handle POST data:

Python
from django.shortcuts import render

def home_view(request):
    if request.method == "POST":
        print(request.POST)  # Prints the POSTed data as a QueryDict
        name = request.POST.get('your_name')
    return render(request, "home.html")

Now when we submit the form it shows the data as below:

POSTmethod
POST Request

This way one can use this data for querying into the database or for processing using some logical operation and pass using the context dictionary to the template.


Next Article
Practice Tags :

Similar Reads