def视图中的Django urls.py和可选参数

时间:2015-06-06 11:16:03

标签: python django url parameters

我在urls.py中有这个。我正在使用paginator。如果我得到一些UsuarioName,它会回复UsuarioName配置文件和page = 1.但我可以看到以下页面。我已经关注了Django paginator doc。

url(r'^(?P<UsuarioName>.+)/$', "actividades.views.ShowUserPage"),
url(r'^(?P<UsuarioName>.+)/?(?P<page>.+)/?$', "actividades.views.ShowUserPage"),

views.py,如果我写def ..(... UsuarioName,page),那就错了,因为第一个url条目没有参数。

def ShowUserPage(request, UsuarioName, page):
    UsuarioModel = UserProfile.objects.get(user__username=UsuarioName)
    UserPage = '<div class="userpage">'
    UserPage += '<strong>' + UsuarioModel.titulo + '</strong><br>'
    UserPage += UsuarioModel.user.get_username() + "<br>"
    UserPage += UsuarioModel.descripcion + "<br>"
    UserPage += '</div>'
    UserPage += '<strong>Actividades de usuario</strong>'
    UserActList = UserActivities.objects.filter(user=UsuarioModel).values('actividad','fecha_alta')
    paginator = Paginator(UserActList, 2)
    page = 1
    try:
        ActPage = paginator.page(page)
    except PageNotAnInteger:
        ActPage = paginator.page(1)
    except EmptyPage:
        ActPage = paginator.page(1)
    #print ActPage.object_list[0]['actividad']
    for ActividadActual in ActPage:
        UserAct = Actividad.objects.get(id_evento=ActividadActual['actividad'])
        UserPage += '<div class="activity">'
        UserPage += '<strong>Actividad: ' + UserAct.titulo + '</strong><br>'
        UserPage += 'Fecha actividad: ' + UserAct.fecha.strftime("%d-%m-%y") + '<br>'
        UserPage += 'Fecha alta: ' + ActividadActual['fecha_alta'].strftime("%d-%m-%y") + '<br>'
        UserPage += '</div>'
    return HttpResponse(UserPage)

我该如何解决?我知道我可以拆分网址,但我不太喜欢它..

2 个答案:

答案 0 :(得分:0)

也许你应该这样做:

url(r'^(?P<UsuarioName>.+)/(?P<page>\d+)/?$', "actividades.views.ShowUserPage"),
url(r'^(?P<UsuarioName>.+)/$', "actividades.views.ShowUserPage"),

我更改了网址的顺序,因此/ me / 3不会先匹配(?P + +)。我还为页面参数设置了一个数字类型,因为它总是一个数字,所以没有理由去捕捉除了之外的其他内容。

然后,你应该尝试:

def ShowUserPage(request, UsuarioName, page=1):

它应该允许没有页面的查询在没有页面参数的情况下调用此函数(将其默认为1)。

我没有尝试过这些,所以如果它没有帮助,我会深入研究它。

答案 1 :(得分:0)

我想我明白了。

默认页面= 1.始终, 下一次,将有一个获取以下页面的链接。我可以把它作为POST参数吗?¿?¿?