Параметры по умолчанию для действий с Django
-
04-07-2019 - |
Вопрос
Есть ли способ передать параметр по умолчанию в действие в том случае, если регулярное выражение ничего не совпало с использованием 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 /', что означает, что имя назначено Нет, а не назначено.
Это оставляет вам два варианта. Вы можете:
<Ол>Например:
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)
; это то, что я делал в прошлом, по крайней мере. Что вы устанавливали в качестве значения по умолчанию?