changed Fragment.short_html (#309)
authorRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Wed, 16 Jun 2010 11:16:56 +0000 (13:16 +0200)
committerRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Wed, 16 Jun 2010 12:10:57 +0000 (14:10 +0200)
reset Fragment.short_html on Book.save

apps/catalogue/models.py
apps/catalogue/templatetags/catalogue_tags.py
wolnelektury/templates/catalogue/book_detail.html
wolnelektury/templates/catalogue/fragment_short.html

index 367f382..cf270f2 100644 (file)
@@ -189,8 +189,12 @@ class Book(models.Model):
     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)
 
@@ -460,11 +464,8 @@ class Fragment(models.Model):
         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))
 
index 7f2bf29..fa78495 100644 (file)
@@ -61,6 +61,29 @@ def simple_title(tags):
     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):
index 809bd1a..60284d6 100644 (file)
@@ -7,7 +7,7 @@
 {% 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>
index ccca721..4526857 100644 (file)
@@ -1,4 +1,5 @@
 {% load i18n %}
+{% load catalogue_tags %}
 <div class="fragment">
     {% if fragment.short_text %}
     <div class='fragment-short-text'>
@@ -13,7 +14,7 @@
         {% 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>