import markdown
from django import template
from django.template.defaultfilters import stringfilter
from django.utils.encoding import force_unicode
from django.utils.safestring import mark_safe

register = template.Library()


@register.filter(name='base_markdown', is_safe=True)
@stringfilter
def base_markdown(value):
    extensions = ["nl2br", ]

    return mark_safe(markdown.markdown(force_unicode(value),
                                       extensions,
                                       safe_mode=True,
                                       enable_attributes=False))

django_project/base/templatetags/custom_markup.py
import markdown
from django import template
from django.template.defaultfilters import stringfilter
from django.utils.encoding import force_unicode
from django.utils.safestring import mark_safe

register = template.Library()


@register.filter(name='base_markdown', is_safe=True)
@stringfilter
def base_markdown(value):
    extensions = ["nl2br", ]

    return mark_safe(markdown.markdown(force_unicode(value),
                                       extensions,
                                       safe_mode=True,
                                       enable_attributes=False))


@register.filter(name='is_gif', is_safe=True)
@stringfilter
def is_gif(value):
    return value[-4:] == '.gif'

django_project/base/templatetags/custom_markup.py
diff --git a/django_project/base/templatetags/custom_markup.py b/django_project/base/templatetags/custom_markup.py
index 5c0c9403e..53d58a119 100644
--- a/django_project/base/templatetags/custom_markup.py
+++ b/django_project/base/templatetags/custom_markup.py
@@ -16,3 +16,9 @@ def base_markdown(value):
                                        extensions,
                                        safe_mode=True,
                                        enable_attributes=False))
+
+
+@register.filter(name='is_gif', is_safe=True)
+@stringfilter
+def is_gif(value):
+    return value[-4:] == '.gif'
diff --git a/django_project/changes/templates/entry/includes/entry_detail.html b/django_project/changes/templates/entry/includes/entry_detail.html
index 45177a3a1..26d04378b 100644
--- a/django_project/changes/templates/entry/includes/entry_detail.html
+++ b/django_project/changes/templates/entry/includes/entry_detail.html
@@ -35,13 +35,17 @@ <h3><span class="text-muted">Feature:</span> {{ entry.title }}</h3>
         {{ entry.description|base_markdown }}
     </div>
     <div class="col-lg-4">
-        {% if entry.image_file %}
-            <a href="{{ MEDIA_URL }}{{ entry.image_file }}">
+        <a href="{{ MEDIA_URL }}{{ entry.image_file }}">
+            {% if entry.image_file|is_gif %}
+                <img class="img-responsive img-rounded pull-right"
+                     src="{{ MEDIA_URL }}{{ entry.image_file }}"
+                     alt=""/>{# see core/settings/contrib.py for large-entry #}
+            {% else %}
                 <img class="img-responsive img-rounded pull-right"
                      src="{{ entry.image_file|thumbnail_url:'large-entry' }}"
                      alt=""/>{# see core/settings/contrib.py for large-entry #}
-            </a>
-        {% endif %}
+            {% endif %}
+        </a>
     </div>
 </div>
 

We need to support animated GIF's
Using licecap or silentcast it is easy to make animated GIF's. When images are uploaded to django though they are resized and converted to PNG. We need to update the logic so thumbs etc. can be created for animate GIF's without losing the animation. 

