1👍
I’d do it via the URL in most cases, particularly if you are creating a view to display an object. Furthermore, I’d use the slug (if there is one) instead of an ID as it looks better in Google SERP, it makes more sense semantically, and it is more readable for users.
Remember that you can easily reverse object’s urls using get_absolute_url()
, the {% url ... %}
tag and the reverse()
function. You won’t be able to avail of these if you use query strings or Posts to display your objects.
Regarding query strings/parameters; I usually go by the rule of constructing the queryset with my URL, but filtering it with parameters. i.e. If I want to see all posts tagged with something, I get the main queryset via the URL /posts/tagged/some_tag
and then drill them down where necessary with parameters; /posts/tagged/some_tag?rating=2
Regarding POST data; this should only really apply when you are presenting a form to edit an object. I would still use the URL to find and display the form (i.e. /posts/my-post-slug/edit/
) and I would use parameters to control any options or features (i.e. /posts/my-post/slug/edit/?highlight_required_fields=true
) but all the fields of the form would be submitted via POST