You can do it either way.
If you do this via page refresh, you might be able to take advantage of the django-filter package to handle some of this. But based upon what you’re describing, you’re still going to end up doing a fair amount of work on this in your code.
If you want to do this dynamically in the browser, then that means using JavaScript. We use the jQuery Datatables module to present tabular data in a sortable & searchable UI.