-
Здравствуйте.
Навешиваю на один урл две функции, одна с параметром другая без:
views:url(r'^fun/(\d+)/$', 'fun', name='fun'),
url(r'^fun/$', 'fun', name='fun'),
Урлы типа:def fun(request, arg=0):
if arg!=0:
....
return render_to_response('template1.html', {...})
else:
....
return render_to_response('template2.html', {...})
/fun/1/, /fun/2/, /fun/3/ прекрасно работаю и открывается template1, а урл типа /fun/ отказывается работать, не показывает template2, выкидывает 404, как проплыть этот подводный камень? -
Значение по умолчанию должно быть не 0, а None.
-
def fun(request, arg=None):
if arg:
....
return render_to_response('template1.html', {...})
else:
....
return render_to_response('template2.html', {...})Не помогла, все равно 404 -
def fun(request, arg=None):
if arg:
....
return render_to_response('template1.html', {...})
else:
....
return render_to_response('template2.html', {...})Не помогла, все равно 404 -
url(r'^fun/(\d+)/$', 'fun', name='fun'),
url(r'^fun/$', 'fun', name='fun'),ну попробуй либо именоваными параметрами пользоваться
url(r'^fun/(?P=<id>\d+)', 'fun', name='fun')
then >
def fun(request, id):
и посмотреть что туда попадает.
хотя 404 означает что правило для урла не найдено, попробуй их местами поменять. -
мой предыдущий совет - бред.
все работает:
ищи проблему в роутинге.url(r'^fun/(\d+)/$', 'test.views.fun', name='fun_complex'),
url(r'^fun/$', 'test.views.fun', name='fun_simple'),
....
def fun(request, arg=None):
if arg:
return HttpResponse('arg passed: %s' % str(arg))
else:
return HttpResponse('arg not passed to view')
>>> http://localhost:8001/fun/1/
arg passed: 1
>>> http://localhost:8001/fun/
arg not passed to view -
Местами урлы поменяй.
-
Silverstorm, вы правы, сделал еще раз и все прекрасно заработало

