def save(self, force_insert=False, force_update=False, reset_short_html=True, refresh_mp3=True):
if reset_short_html:
# Reset _short_html during save
+ update = {}
for key in filter(lambda x: x.startswith('_short_html'), self.__dict__):
+ update[key] = ''
self.__setattr__(key, '')
+ # Fragment.short_html relies on book's tags, so reset it here too
+ self.fragments.all().update(**update)
book = super(Book, self).save(force_insert, force_update)
if short_html and len(short_html):
return mark_safe(short_html)
else:
- book_authors = [mark_safe(u'<a href="%s">%s</a>' % (tag.get_absolute_url(), tag.name))
- for tag in self.book.tags if tag.category == 'author']
-
setattr(self, key, unicode(render_to_string('catalogue/fragment_short.html',
- {'fragment': self, 'book': self.book, 'book_authors': book_authors})))
+ {'fragment': self})))
self.save()
return mark_safe(getattr(self, key))
return capfirst(', '.join(title))
+@register.simple_tag
+def book_title(book, html_links=False):
+ names = list(book.tags.filter(category='author'))
+
+ books = []
+ while book:
+ books.append(book)
+ book = book.parent
+ names.extend(reversed(books[::-1]))
+
+ if html_links:
+ names = ['<a href="%s">%s</a>' % (tag.get_absolute_url(), tag.name) for tag in names]
+ else:
+ names = [tag.name for tag in names]
+
+ return ', '.join(names)
+
+
+@register.simple_tag
+def book_title_html(book):
+ return book_title(book, html_links=True)
+
+
@register.simple_tag
def title_from_tags(tags):
def split_tags(tags):
{% block bodyid %}book-detail{% endblock %}
{% block body %}
- <h1>{{ book.title }}, {{ categories.author|join:", " }}</h1>
+ <h1>{% book_title book %}</h1>
<form action="{% url search %}" method="get" accept-charset="utf-8" id="search-form">
<p>{{ form.q }} <input type="submit" value="{% trans "Search" %}" /> <strong>{% trans "or" %}</strong> <a href="{% url main_page %}">{% trans "return to main page" %}</a></p>
</form>
{% load i18n %}
+{% load catalogue_tags %}
<div class="fragment">
{% if fragment.short_text %}
<div class='fragment-short-text'>
{% endif %}
</div>
<div class="fragment-metadata">
- <p><a href="{{ book.get_absolute_url }}">{{ book.title }}</a>, {{ book_authors|join:"," }}
+ <p>{% book_title_html fragment.book %}
<a href="{{ fragment.get_absolute_url }}">({% trans "See in a book" %})</a></p>
</div>
<div class="clearboth"></div>