Проблема на Django Url Routers - PullRequest
0 голосов
/ 30 июня 2019

Я пытаюсь сделать URL-маршрутизатор в Django, который поддерживает следующие URL:

  • http://localhost:8000/location/configuration
  • http://localhost:8000/location/d3d710fcfc1391b0a8182239881b8bf7/configuration
url(r'^locations/configuration$',
    location_config.as_view(), name="location-config"),
url(r'^locations/(?P<location_key>[\w]+)/configuration$',
    location_config.as_view(), name="location-config-uri")

Всякий раз, когда я пытался нажать http://localhost:8000/location/configuration, он выбирал второй формат маршрутизации URL вместо того, чтобы выбирать первый.

Ошибка:

Ошибка типа в / location / configuration / get () отсутствует 1 требуется позиционный аргумент: 'location_key'

Кто-нибудь может мне помочь, что не так с форматом маршрутизации url?

Ответы [ 2 ]

1 голос
/ 30 июня 2019

Нет, он выбирает первый шаблон, который не имеет аргументов, однако вы используете одно и то же представление в обоих шаблонах, а представление location_config имеет обязательный аргумент location_key, который не предоставляется, когда первый шаблон соответствует URL. Вот что говорит сообщение об ошибке.

Поэтому напишите другое представление, для которого не требуется аргумент location_key, или измените определение этого представления: добавьте значение по умолчанию к параметру

def location_config(request, location_key=None):
    ....

теперь это не « обязательный позиционный аргумент».

0 голосов
/ 30 июня 2019

django Будет искать ПК, когда вы используете детальный вид по умолчанию.вы должны переопределить его, используя get_object()

в вашем случае

def get_object(self, queryset=None): 
    location_key = self.kwargs.get('location_key')
    obj = Model.objects.get(id=location_key)
    return obj
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...