url.go
func URLParts(ctx context.Context, r *http.Request) (context.Context, []string) {
	if ctx == nil {
		ctx = context.Background()
	}

	if parts, ok := ctx.Value("scaffold_url_parts").([]string); ok {
		return ctx, parts
	}

	parts := pathSplit(r.URL.Path)

	ctx = context.WithValue(ctx, "scaffold_url_parts", parts)
	return URLParts(ctx, r)
}
func URLParts(ctx context.Context, r *http.Request) (context.Context, []string) {
	if ctx == nil {
		ctx = context.Background()
	}

	if parts, ok := ctx.Value("scaffold_url_parts").([]string); ok {
		return ctx, parts
	}

	parts := pathSplit(r.URL.Path)

	ctx = context.WithValue(ctx, "scaffold_url_parts", parts)
	return URLParts(ctx, r)
}
// URLParts spliths a path into parts and caches it in the context