Вопрос

Есть ли способ передать параметр по умолчанию в действие в том случае, если регулярное выражение ничего не совпало с использованием django?


urlpatterns = patterns('',(r'^test/(?P<name>.*)?

Я попытался установить третий параметр в urlpatterns для словаря, содержащего ', и присвоить параметру name значение по умолчанию для метода, ни один из которых не работал. параметр имени всегда кажется None. Я действительно не хочу кодировать проверку для None, если бы я мог установить значение по умолчанию.

Уточнение: вот пример того, на что я его менял.


def displayName(request,name='Steve'):
      return HttpResponse(name)
#i also tried

urlpatterns = patterns('',
      (r'^test/(?P<name>.*)?

когда я указываю браузеру на вид, он отображает текст 'None'

Есть идеи?

,'myview.displayName')) #myview.py def displayName(request,name): # write name to response or something

Я попытался установить третий параметр в urlpatterns для словаря, содержащего ', и присвоить параметру name значение по умолчанию для метода, ни один из которых не работал. параметр имени всегда кажется None. Я действительно не хочу кодировать проверку для None, если бы я мог установить значение по умолчанию.

Уточнение: вот пример того, на что я его менял.

<*>

когда я указываю браузеру на вид, он отображает текст 'None'

Есть идеи?

, 'myview.displayName', dict(name='Test') ) )

когда я указываю браузеру на вид, он отображает текст 'None'

Есть идеи?

,'myview.displayName')) #myview.py def displayName(request,name): # write name to response or something

Я попытался установить третий параметр в urlpatterns для словаря, содержащего ', и присвоить параметру name значение по умолчанию для метода, ни один из которых не работал. параметр имени всегда кажется None. Я действительно не хочу кодировать проверку для None, если бы я мог установить значение по умолчанию.

Уточнение: вот пример того, на что я его менял.

<*>

когда я указываю браузеру на вид, он отображает текст 'None'

Есть идеи?

Это было полезно?

Решение

Проблема в том, что когда шаблон сопоставляется с 'test /', групповой термин, захваченный регулярным выражением, содержит отображение 'name' = > Нет:

>>> url.match("test/").groupdict()
{'name': None}

Это означает, что когда вызывается представление, используется что-то, что, как я ожидаю, похоже на приведенное ниже:

view(request, *groups, **groupdict)

что эквивалентно:

view(request, name = None)

для 'test /', что означает, что имя назначено Нет, а не назначено.

Это оставляет вам два варианта. Вы можете:

<Ол>
  • Явно проверяйте None в коде представления, что является своего рода хакером.
  • Перепишите правило отправки URL, чтобы сделать захват имени необязательным, и введите второе правило для захвата, когда имя не указано.
  • Например:

    urlpatterns = patterns('',
        (r'^test/(?P<name>.+)
    
    

    При втором подходе вы можете просто вызвать метод без шаблона захвата и позволить python обрабатывать параметр по умолчанию, или вы можете вызвать другое представление, которое делегирует.

    ,'myview.displayName'), # note the '+' instead of the '*' (r'^test/

    При втором подходе вы можете просто вызвать метод без шаблона захвата и позволить python обрабатывать параметр по умолчанию, или вы можете вызвать другое представление, которое делегирует.

    ,'myview.displayName'), )

    При втором подходе вы можете просто вызвать метод без шаблона захвата и позволить python обрабатывать параметр по умолчанию, или вы можете вызвать другое представление, которое делегирует.

    Другие советы

    Я подумал , что вы могли бы def displayName (request, name = defaultObj) ; это то, что я делал в прошлом, по крайней мере. Что вы устанавливали в качестве значения по умолчанию?

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top