diff --git a/news/9.bugfix b/news/9.bugfix
new file mode 100644
index 0000000..cad31f8
--- /dev/null
+++ b/news/9.bugfix
@@ -0,0 +1,1 @@
+Do not show batch navigation for single page with orphan.  [maurits]
diff --git a/plone/batching/batch.py b/plone/batching/batch.py
index f0c8fca..e569351 100644
--- a/plone/batching/batch.py
+++ b/plone/batching/batch.py
@@ -191,7 +191,7 @@ class BaseBatch(object):
     def multiple_pages(self):
         """ `True`, if batch has more than one page.
         """
-        return self.sequence_length > self.pagesize
+        return self.sequence_length > (self.pagesize + self.orphan)
 
     @property
     def previouspage(self):

Incorrect behavior using orphan
I'm manually using batching on a non-plone sequence and I'm having issue with latest 1.0.5 version (version 1.0.4 with the configuration belowe raise an error I think you fixed in the 1.0.5).

This is the batch call:

```
Batch(self._rows, 10, start=self.b_start, end=self.b_start+bsize, orphan=1, overlap=0, pagerange=7)
```

`bsize` is 10

My `self._rows` is a 11-long sequence.

The effect: in the template the orphan parameter seems partially ignored: instead of seeing a single page of 11 elements (10+1 orphan) I see 10 elements and a link to page 2.

Going to page two will show the 11th element but the navigation UI will still show only a "[1]" (not linkable) and no "previous page" link.

diff --git a/plone/batching/tests.py b/plone/batching/tests.py
index f948753..a46b8bc 100644
--- a/plone/batching/tests.py
+++ b/plone/batching/tests.py
@@ -203,6 +203,14 @@ class TestBatch(unittest.TestCase):
         batch = BaseBatch(range(12), 10)
         self.assertEquals(batch.multiple_pages, True)
 
+    def test_multiple_pages_orphan(self):
+        """sequence with orphans"""
+        self.assertFalse(BaseBatch(range(20), 20, orphan=0).multiple_pages)
+        self.assertTrue(BaseBatch(range(21), 20, orphan=0).multiple_pages)
+        self.assertFalse(BaseBatch(range(21), 20, orphan=1).multiple_pages)
+        self.assertFalse(BaseBatch(range(22), 20, orphan=2).multiple_pages)
+        self.assertTrue(BaseBatch(range(22), 20, orphan=1).multiple_pages)
+
     def test_pagenumber_never_over_numpages(self):
         """computed _pagenumber is never > numpages, this
            makes previous_pages not fail."""

pip install -e .
parse_log_pytest
requirements.txt
pytest
apt-get update apt-get install -y gcc
3.7
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
AccessControl==6.3
Acquisition==5.2
AuthEncoding==5.0
beautifulsoup4==4.13.3
BTrees==5.2
certifi @ file:///croot/certifi_1671487769961/work/certifi
cffi==1.15.1
Chameleon==4.2.0
DateTime==5.5
DocumentTemplate==4.6
exceptiongroup==1.2.2
ExtensionClass==5.1
importlib-metadata==6.7.0
iniconfig==2.0.0
MultiMapping==5.0
multipart==1.1.0
packaging==24.0
PasteDeploy==3.1.0
Persistence==4.1
persistent==5.2
-e git+https://github.com/plone/plone.batching.git@356c975f0d8100fc80bec10e0217c4ca3ea90f80#egg=plone.batching
pluggy==1.2.0
pycparser==2.21
pytest==7.4.4
python-gettext==5.0
pytz==2025.2
RestrictedPython==7.3
roman==4.2
soupsieve==2.4.1
tomli==2.0.1
transaction==4.0
typing_extensions==4.7.1
waitress==2.1.2
WebOb==1.8.9
WebTest==3.0.1
WSGIProxy2==0.5.1
z3c.pt==4.4
zc.lockfile==3.0.post1
ZConfig==4.1
zExceptions==5.0
zipp==3.15.0
ZODB==6.0
zodbpickle==3.3
Zope==5.10
zope.annotation==5.0
zope.browser==3.0
zope.browsermenu==5.0
zope.browserpage==5.0
zope.browserresource==5.1
zope.cachedescriptors==5.0
zope.component==6.0
zope.configuration==5.0.1
zope.container==5.2
zope.contentprovider==5.0
zope.contenttype==5.1
zope.datetime==5.0.0
zope.deferredimport==5.0
zope.deprecation==5.0
zope.dottedname==6.0
zope.event==5.0
zope.exceptions==5.1
zope.filerepresentation==6.0
zope.globalrequest==2.0
zope.hookable==6.0
zope.i18n==5.1
zope.i18nmessageid==6.1.0
zope.interface==6.4.post2
zope.lifecycleevent==5.0
zope.location==5.0
zope.pagetemplate==5.1
zope.processlifetime==3.0
zope.proxy==5.3
zope.ptresource==5.0
zope.publisher==7.0
zope.schema==7.0.1
zope.security==6.2
zope.sequencesort==5.0
zope.site==5.0
zope.size==5.0
zope.structuredtext==5.0
zope.tal==5.0.1
zope.tales==6.0
zope.testbrowser==6.0
zope.testing==5.0.1
zope.traversing==5.0
zope.viewlet==5.0
Zope2==4.0

name: plone.batching
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=22.3.1=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - accesscontrol==6.3
      - acquisition==5.2
      - authencoding==5.0
      - beautifulsoup4==4.13.3
      - btrees==5.2
      - cffi==1.15.1
      - chameleon==4.2.0
      - datetime==5.5
      - documenttemplate==4.6
      - exceptiongroup==1.2.2
      - extensionclass==5.1
      - importlib-metadata==6.7.0
      - iniconfig==2.0.0
      - multimapping==5.0
      - multipart==1.1.0
      - packaging==24.0
      - pastedeploy==3.1.0
      - persistence==4.1
      - persistent==5.2
      - plone-batching==1.1.5.dev0
      - pluggy==1.2.0
      - pycparser==2.21
      - pytest==7.4.4
      - python-gettext==5.0
      - pytz==2025.2
      - restrictedpython==7.3
      - roman==4.2
      - soupsieve==2.4.1
      - tomli==2.0.1
      - transaction==4.0
      - typing-extensions==4.7.1
      - waitress==2.1.2
      - webob==1.8.9
      - webtest==3.0.1
      - wsgiproxy2==0.5.1
      - z3c-pt==4.4
      - zc-lockfile==3.0.post1
      - zconfig==4.1
      - zexceptions==5.0
      - zipp==3.15.0
      - zodb==6.0
      - zodbpickle==3.3
      - zope==5.10
      - zope-annotation==5.0
      - zope-browser==3.0
      - zope-browsermenu==5.0
      - zope-browserpage==5.0
      - zope-browserresource==5.1
      - zope-cachedescriptors==5.0
      - zope-component==6.0
      - zope-configuration==5.0.1
      - zope-container==5.2
      - zope-contentprovider==5.0
      - zope-contenttype==5.1
      - zope-datetime==5.0.0
      - zope-deferredimport==5.0
      - zope-deprecation==5.0
      - zope-dottedname==6.0
      - zope-event==5.0
      - zope-exceptions==5.1
      - zope-filerepresentation==6.0
      - zope-globalrequest==2.0
      - zope-hookable==6.0
      - zope-i18n==5.1
      - zope-i18nmessageid==6.1.0
      - zope-interface==6.4.post2
      - zope-lifecycleevent==5.0
      - zope-location==5.0
      - zope-pagetemplate==5.1
      - zope-processlifetime==3.0
      - zope-proxy==5.3
      - zope-ptresource==5.0
      - zope-publisher==7.0
      - zope-schema==7.0.1
      - zope-security==6.2
      - zope-sequencesort==5.0
      - zope-site==5.0
      - zope-size==5.0
      - zope-structuredtext==5.0
      - zope-tal==5.0.1
      - zope-tales==6.0
      - zope-testbrowser==6.0
      - zope-testing==5.0.1
      - zope-traversing==5.0
      - zope-viewlet==5.0
      - zope2==4.0
prefix: /opt/conda/envs/plone.batching

plone/batching/tests.py::TestBatch::test_multiple_pages_orphan
plone/batching/tests.py::TestUtilsOpt::test_opt_end_smaller_start plone/batching/tests.py::TestUtilsOpt::test_opt_nosize_noend plone/batching/tests.py::TestUtilsOpt::test_opt_nosize_start_end plone/batching/tests.py::TestUtilsOpt::test_opt_overlap plone/batching/tests.py::TestUtilsOpt::test_opt_standard plone/batching/tests.py::TestUtilsOpt::test_opt_start_bigger_length plone/batching/tests.py::TestUtils::test_calculate_leapback plone/batching/tests.py::TestUtils::test_calculate_leapforward plone/batching/tests.py::TestUtils::test_calculate_pagenumber plone/batching/tests.py::TestUtils::test_calculate_pagenumber_zerobatch plone/batching/tests.py::TestUtils::test_calculate_pagerange plone/batching/tests.py::TestUtils::test_calculate_quantum_leap_gap plone/batching/tests.py::TestBatch::test_batch_bsize plone/batching/tests.py::TestBatch::test_getitem_negative plone/batching/tests.py::TestBatch::test_getitem_out_of_batch plone/batching/tests.py::TestBatch::test_getitem_resultcount plone/batching/tests.py::TestBatch::test_items_not_on_page plone/batching/tests.py::TestBatch::test_lastpage plone/batching/tests.py::TestBatch::test_lastpage_with_orphans plone/batching/tests.py::TestBatch::test_multiple_pages_equals plone/batching/tests.py::TestBatch::test_multiple_pages_longer plone/batching/tests.py::TestBatch::test_multiple_pages_smaller plone/batching/tests.py::TestBatch::test_navlist_no_pagerange plone/batching/tests.py::TestBatch::test_navlist_with_pagerange plone/batching/tests.py::TestBatch::test_pagenumber_never_over_numpages plone/batching/tests.py::TestBatch::test_previous plone/batching/tests.py::TestBatch::test_previous_first plone/batching/tests.py::TestQuantumBatch::test_quantumbatch plone/batching/tests.py::TestBrowser::test_batchmacrosview plone/batching/tests.py::TestBrowser::test_batchview_base plone/batching/tests.py::TestBrowser::test_batchview_plone plone/batching/tests.py::TestBrowser::test_batchview_plone_ajax_load plone/batching/tests.py::test_suite
news/9.bugfix plone/batching/batch.py
news/9.bugfix plone/batching/batch.py