1. Новичок

    18.07.2010

    0 ↑
    0 ↓
    Здравствуйте.
    Навешиваю на один урл две функции, одна с параметром другая без:
    url(r'^fun/(\d+)/$', 'fun', name='fun'),
    url(r'^fun/$', 'fun', name='fun'),
    views:
    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, как проплыть этот подводный камень?
  2. sealion

    18.07.2010

    0 ↑
    0 ↓
    Значение по умолчанию должно быть не 0, а None.
  3. Новичок

    18.07.2010

    0 ↑
    0 ↓
    def fun(request, arg=None):
    if arg:
    ....
    return render_to_response('template1.html', {...})

    else:
    ....
    return render_to_response('template2.html', {...})
    Не помогла, все равно 404
  4. Новичок

    18.07.2010

    0 ↑
    0 ↓
    def fun(request, arg=None):
    if arg:
    ....
    return render_to_response('template1.html', {...})

    else:
    ....
    return render_to_response('template2.html', {...})
    Не помогла, все равно 404
  5. Silverstorm

    18.07.2010

    0 ↑
    0 ↓
    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 означает что правило для урла не найдено, попробуй их местами поменять.
  6. Silverstorm

    19.07.2010

    0 ↑
    0 ↓
    мой предыдущий совет - бред.
    все работает:
        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
    ищи проблему в роутинге.
  7. Местами урлы поменяй.
  8. Новичок

    19.07.2010

    0 ↑
    0 ↓
    Silverstorm, вы правы, сделал еще раз и все прекрасно заработало