Как я могу получить параметры из URL в django
Я пытаюсь отправить параметр по URL и пытаюсь использовать его в представлении списка. Но я не могу получить его в моем представлении. Я знаю, что делаю какую-то глупую ошибку, но не могу ее найти.
Вот ссылка, которую я использую в своем шаблоне:
<a class="dropdown-item" href="{% url 'listarmateriales' tipolista='metales' %}">Ver metales
Это мой url.py:
path('listarmateriales/<tipolista>',listarmateriales.as_view(), name='listarmateriales'),
Здесь я пытаюсь получить "tipolista" в моем views.py:
class listarmateriales(ListView):
template_name = 'materiales/materialeslist.html'
def get_queryset(self):
if self.request.GET.get('tipolista') is not None:
lista=Materiales.objects.all()
tipolista=self.request.GET.get('tipolista' '')
if tipolista=='metales':
Do whatever...
else:
Я пробовал несколько разных синтаксисов, но результат всегда один и тот же, я не могу прочитать "tipolista", я потратил много времени на это, слишком много. Я знаю, что это должно быть что-то простое, но я новичок в этом. Заранее спасибо
Это не GET-параметры, это параметры URL. Они хранятся в self.kwargs
, поэтому вы обращаетесь к ним с помощью:
def get_queryset(self):
lista = Materiales.objects.all()
tipolista = self.kwargs['tipolista']
if tipolista=='metales':
# …
else:
# …
они не могут быть None
, так как существуют для того, чтобы "выстрелить" представлением.
вы можете посмотреть
Теперь давайте узнаем, как мы можем реализовать это в Django.
Как получить параметр из URL в Django Django URL передает параметр в просмотр Django URL параметры в шаблоне Получение параметров из URL в Django пример Преобразователи пути Django Django URL параметры строка Django URL slug параметр
the link - https://pythonguides.com/get-url-parameters-in-django/
Чтобы urls.py распознал tipolista как строковую переменную, вы должны передать tipolista в качестве параметра представления. Таким образом, ваша функция представления должна быть примерно такой:
def get_queryset(self, tipolista):
if self.request.GET.get('tipolista') is not None:
lista=Materiales.objects.all()
if tipolista=='metales':
#...
else:
#...
В вашем шаблоне url, tipolista должна предшествовать 'str':
path('listarmateriales/<str:tipolista>',listarmateriales.as_view(), name='listarmateriales'),