Принудительная строка запроса Django в URL - PullRequest
0 голосов
/ 16 мая 2018

Скажем, у вас есть такой URL-адрес:

/cats/?filter=kittens

Возможно ли создать шаблон URL-адреса django, который заставляет использовать строку запроса?

В настоящее время у меня есть:

url(r'^/cats/$', views.CatsListView.as_view(), name='cats')

Теперь я хочу добавить строку запроса и получить другое представление, что-то вроде этого:

url(r'^/cats/?filter=(?P<filter>.+?)$', views.CatsFilteredListView.as_view(), name='cats-filtered')

Можно ли сделать что-то подобное и при этом сохранить строку запроса в параметре GETrequest?
Помните, что это всего лишь тестовый сценарий, я, и вы тоже должны знать, что фильтрация, как, вероятно, не тот путь.

Ответы [ 3 ]

0 голосов
/ 16 мая 2018

Нет, это невозможно сделать. Если вам действительно нужны два отдельных представления, вы можете написать представление, которое отправляет правильное представление.

def cat_list_view(request, *args, **kwargs):
    if 'filter' in request.GET:
        return cat_list_filter_view(request, *args, **kwargs)
    else:
        return cat_list_unfiltered_view(request, *args, **kwargs)

Однако для вашего примера CatsListView и CatsFilteredListView, вероятно, есть лучший способ объединить представления. Например, вы можете выполнить фильтрацию в методе get_queryset.

0 голосов
/ 31 октября 2018

Хотя верно, что вы не можете манипулировать таким образом компонентом пути, вы можете передать словарь. Это третий безымянный аргумент.

Этот подход может быть полезен, если вы хотите использовать то же представление длянесколько ресурсов и передают данные для настройки его поведения в каждом случае (ниже мы предоставляем разные шаблоны в каждом случае).

path('url/', views.my_reused_view, {'my_template_name': 'some_path'}, name='aurl'),
path('anotherurl/', views.my_reused_view, {'my_template_name': 'another_path'}, name='anotherurl'),

Примечание. Дополнительные параметры и именованные захваченные шаблоны передаются врассматривать в качестве именованных аргументов.Если вы используете одно и то же имя как для захваченного шаблона, так и для дополнительной опции, то только представление захваченного шаблона будет отправлено в представление (значение, указанное в дополнительной опции, будет удалено).

Предоставлено https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Generic_views

0 голосов
/ 16 мая 2018

Краткий ответ: нет, это невозможно. Шаблоны URL Django совпадают только в компоненте «путь» URL, точка.

...