List View Function based Views Django (original) (raw)

Last Updated : 15 May, 2025

A List View is a type of Django view used to display multiple instances of a model (i.e., rows from a database table). It is commonly used when you need to present a list of items on a page, for example, listing products on an eCommerce site. While Django provides built-in support for List Views using class-based views, this guide demonstrates how to implement it manually using function-based views.

Django List View - Function Based Views

Illustration of **How to create and use List view using an example, consider a project named "geeksforgeeks" having an app named "geeks".

Refer to the following articles to check how to create a project and an app in Django:

Step 1: Define a Model

Create a simple model in **geeks/models.py:

Python `

from django.db import models

class GeeksModel(models.Model): title = models.CharField(max_length=200) description = models.TextField()

def __str__(self):
    return self.title

`

Step 2: Apply Migrations

Run the following commands to create the corresponding database table

python manage.py makemigrations
python manage.py migrate

Step 3: Create Sample Data

Use Django's shell to create model instances:

python manage.py shell

**Enter following commands in shell :

from geeks.models import GeeksModel

GeeksModel.objects.create(title="title1", description="description1")
GeeksModel.objects.create(title="title2", description="description2")
GeeksModel.objects.create(title="title3", description="description3")

django_shell1

Snapshot of the Command in Shell

Now we have everything ready for back end.

To verify that instances have been created, exit the shell using **exit() command and run the development server using this command:

python manage.py runserver

After running the commad, visit the deelopment url- **http://127.0.0.1:8000/

django-listview-check-models-instances

Step 4: Create the List View

In **geeks/views.py, define a function-based view to fetch and render the model instances:

Python `

from django.shortcuts import render from .models import GeeksModel

def list_view(request): context = { "dataset": GeeksModel.objects.all() } return render(request, "list_view.html", context)

`

Step 5: Create the Template

In **templates/list_view.html, add the following HTML to display the data:

html `

{% for data in dataset %}

{{ data.title }}

{{ data.description }}


{% endfor %}

`

Run the development server and visit the URL **http://127.0.0.1:8000/ to see the list view in action.

**Output:

django-listview-function-based

Sorting the List (Descending Order)

You can order the results in reverse (newest first) by modifying the view:

Python `

def list_view(request): context = { "dataset": GeeksModel.objects.all().order_by("-id") } return render(request, "list_view.html", context)

`

**order_by("-id"): sorts the items in **descending order of their **ID.

**Output:

django-listview-order-by

Filtering the List

You can also filter the data shown in the list view. For example, let’s add a new entry:

Lunch the shell using the below command:

python manage.py shell

Enter the following commands in shell:

from geeks.models import GeeksModel

GeeksModel.objects.create(title = "Naveen", description = "GFG is Best").save()

django-listview-models

To display only items with the word “**title” in their title, update the view:

Python `

def list_view(request): context = { "dataset": GeeksModel.objects.filter(title__icontains="title") } return render(request, "list_view.html", context)

`

**title__icontains="title" filters entries whose title contains the word "**title", case-insensitively.

Run the development server and visit the URL **http://127.0.0.1:8000/ again to see the filtered output.

django-listview-function-based2