1. Для скрытия параметра в URL-адресе Django можно использовать метод POST вместо GET. При отправке данных через метод POST, параметры не будут отображаться в URL.
2. Если необходимо передавать параметр в URL-адресе, но не желательно отображать его на странице, можно использовать атрибут `hidden` в HTML-форме. Например:
```html
<form method="GET" action="/search">
<input type="hidden" name="param_name" value="param_value">
<input type="submit" value="Submit">
</form>
```
3. В случае, если требуется передавать параметр в URL и видимость не является проблемой, можно использовать Django URL-шаблоны с необязательным параметром. Например:
```python
from django.urls import path
from . import views
urlpatterns = [
path('category/<int:category_id>/', views.category_view, name='category'),
path('category/', views.category_view, name='category_no_id'),
]
```
Таким образом, `views.category_view` будет обрабатывать как URL `/category/`, так и URL `/category/<int:category_id>/`. В функции `category_view` в `views.py` можно проверить наличие `category_id`, чтобы избежать дублирования кода.
```python
def category_view(request, category_id=None):
if category_id:
# Код для обработки URL с параметром
category = Category.objects.get(id=category_id)
# ...
else:
# Код для обработки URL без параметра
# ...
```
Таким образом, можно избежать дублирования кода и обрабатывать оба URL в одной функции представления.