Django: How to write a function based view used for URL with parameter

I am learning Django, using function based views, and I am struggling with the following: I have this path in


that is supposed to show all the projects of the particular user (client). In order to reach it, username should be parameter of the function based view, however I am struggling how to write such view... I have this:

def UserProjectList(request,username):
    user = User.objects.get(username=username) #THIS IS WRONG and should return id of the user
    #user = User.objects.filter(username=username) #also wrong

    tag_list = ProjectTagsSQL.objects.all() #ProjectTagsSQL and ProjectSQL are connected
    project_list = ProjectSQL.objects.filter(client=user) #ProjectSQL table has column client_id (pk is id in User) and table contains all the projects

    context = {
        'tagy' : tag_list,
        'projecty' : project_list

    return render(request, 'home_page/user_projects.html', context) #SHOULD THE PARAMETER BE INCLUDED HERE?

I tried to inspire with the code from class based view I found on the internets (thats is working for me but i didnt manage to connect it with ProjectTagsSQL as i managed in FBV, but that's a different problem) but i didnt manage

class UserProjectListView(ListView):
    model = ProjectSQL
    template_name = 'home_page/user_projects.html' 
    context_object_name = 'data'

    def get_queryset(self):
        user = get_object_or_404(User, username=self.kwargs.get('username'))
        return ProjectSQL.objects.filter(client=user)

        # original qs
        qs = super().get_queryset()
        # filter by a variable captured from url, for example
        return ProjectSQL.objects.filter(username=self.kwargs['username'])

        return user

Could someone help me how to deal with such function based view please? As this solution its not working (will return nothing for any user)

You need to write so:

from django.shortcuts import get_object_or_404

def UserProjectList(request,username):
    user = get_object_or_404(User,username=username)
    tag_list = ProjectTagsSQL.objects.all()
    project_list = ProjectSQL.objects.filter(

    context = {
        'tagy' : tag_list,
        'projecty' : project_list

    return render(request, 'home_page/user_projects.html', context)

Note: Always append / at the end of every route so it should be path('user/<str:username>/'....

Note: Function based views are generally written in snake_case so it is better to name it as user_project_list instead of UserProjectList.

Back to Top