Django регулярное выражение разбор URL для вызова неправильного представления - PullRequest
0 голосов
/ 15 октября 2019

У меня есть проект Django 2.2 (с использованием остальной инфраструктуры), где мне нужно вызвать функцию представления с URL следующего формата:

/class/students?date=07092019`

, и я настроил следующий URLroute для обработки этого URL:

re_path(r'^class/students%3Fdate%3D(?P<date>\w+)/$',StudentsInClassView.as_view() ,name='student')

Соответствующая функция представления имеет следующее определение:

class StudentsInClassView(APIView):

    def get(self, request, date,format=None):

По какой-то причине, когда я иду на URL, он преобразуется в

/class/students/?date=07092019

и другое представление с URL

path('class/students/',StudentsView.as_view() ,name='students')

.

Если я удаляю ?date= из URL и просто включаю фактическую дату, StudentsInClassView вызывается, как и ожидалось. Я избежал как вопросительного знака, так и знака равенства, но это, похоже, не имеет значения.

Как я могу заставить слаг ?date= оставаться в URL, как он используется для вызоваStudentsInClassView? Есть ли другое регулярное выражение, которое можно использовать для сопоставления всего URL?

1 Ответ

4 голосов
/ 15 октября 2019

Деталь после отметки ? называется URL Query String. Вы не должны включать это в регулярное выражение. Вместо этого можно либо изменить URL-адрес на /class/students/<str:date>/, либо добавить некоторую логику для выдачи ошибок в представлении, если нет date (но я не думаю, что это было бы идеальным решением, поскольку строки запроса URL-адреса не являются обязательной частьюURL):

class StudentsView(...):
    def get(self, request, *args, **kwargs):
        if not 'date' in request.GET:
            raise HttpResponse("provide date", status=400)
        return super().get(request, *args, **kwargs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...