diff --git a/src/calibre/ebooks/metadata/book/render.py b/src/calibre/ebooks/metadata/book/render.py
index 1c73fd55b4..1325ce2d43 100644
--- a/src/calibre/ebooks/metadata/book/render.py
+++ b/src/calibre/ebooks/metadata/book/render.py
@@ -62,6 +62,7 @@ def mi_to_html(mi, field_list=None, default_author_link=None, use_roman_numbers=
row = u'
%s | %s | '
p = prepare_string_for_xml
a = partial(prepare_string_for_xml, attribute=True)
+ book_id = getattr(mi, 'id', 0)
for field in (field for field, display in field_list if display):
try:
@@ -119,7 +120,7 @@ def mi_to_html(mi, field_list=None, default_author_link=None, use_roman_numbers=
path = force_unicode(mi.path, filesystem_encoding)
scheme = u'devpath' if isdevice else u'path'
url = prepare_string_for_xml(path if isdevice else
- unicode(mi.id), True)
+ unicode(book_id), True)
pathstr = _('Click to open')
extra = ''
if isdevice:
@@ -141,13 +142,13 @@ def mi_to_html(mi, field_list=None, default_author_link=None, use_roman_numbers=
bpath = '/'.join((os.path.basename(h), t))
data = ({
'fmt':x, 'path':a(path or ''), 'fname':a(mi.format_files.get(x, '')),
- 'ext':x.lower(), 'id':mi.id, 'bpath':bpath,
+ 'ext':x.lower(), 'id':book_id, 'bpath':bpath,
} for x in mi.formats)
fmts = [u'{fmt}'.format(**x) for x in data]
ans.append((field, row % (name, u', '.join(fmts))))
elif field == 'identifiers':
urls = urls_from_identifiers(mi.identifiers)
- links = [u'%s' % (a(url), a(id_typ), a(id_val), a(item_data(field, id_typ, mi.id)), p(namel))
+ links = [u'%s' % (a(url), a(id_typ), a(id_val), a(item_data(field, id_typ, book_id)), p(namel))
for namel, id_typ, id_val, url in urls]
links = u', '.join(links)
if links:
@@ -186,7 +187,7 @@ def mi_to_html(mi, field_list=None, default_author_link=None, use_roman_numbers=
continue
val = '%s' % (
search_href('publisher', mi.publisher), _('Click to see books with {0}: {1}').format(metadata['name'], a(mi.publisher)),
- a(item_data('publisher', mi.publisher, mi.id)), p(mi.publisher))
+ a(item_data('publisher', mi.publisher, book_id)), p(mi.publisher))
ans.append((field, row % (name, val)))
else:
val = mi.format_field(field)[-1]
@@ -207,7 +208,7 @@ def mi_to_html(mi, field_list=None, default_author_link=None, use_roman_numbers=
'%(series)s') % dict(
sidx=fmt_sidx(sidx, use_roman=use_roman_numbers), cls="series_name",
series=p(series), href=search_href(st, series),
- data=a(item_data(field, series, mi.id)),
+ data=a(item_data(field, series, book_id)),
tt=p(_('Click to see books in this series')))
elif metadata['datatype'] == 'datetime':
aval = getattr(mi, field)
@@ -222,7 +223,8 @@ def mi_to_html(mi, field_list=None, default_author_link=None, use_roman_numbers=
if field == 'tags':
all_vals = sorted(all_vals, key=sort_key)
links = ['%s' % (
- search_href(st, x), _('Click to see books with {0}: {1}').format(metadata['name'], a(x)), a(item_data(field, x, mi.id)), p(x))
+ search_href(st, x), _('Click to see books with {0}: {1}').format(
+ metadata['name'], a(x)), a(item_data(field, x, book_id)), p(x))
for x in all_vals]
val = metadata['is_multiple']['list_to_ui'].join(links)
elif metadata['datatype'] == 'enumeration':
@@ -232,7 +234,7 @@ def mi_to_html(mi, field_list=None, default_author_link=None, use_roman_numbers=
st = field
val = '%s' % (
search_href(st, val), a(_('Click to see books with {0}: {1}').format(metadata['name'], val)),
- a(item_data(field, val, mi.id)), p(val))
+ a(item_data(field, val, book_id)), p(val))
ans.append((field, row % (name, val)))