summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Zapke-Gründemann <info@keimlink.de>2012-01-09 07:25:19 +0100
committerMarkus Zapke-Gründemann <info@keimlink.de>2012-01-09 07:25:19 +0100
commit2126f86d4d83409311e264dbaf93facf435a505b (patch)
tree814d108bc4977c70fb26b5247bae9ad8fe89f8f6
parentd8e87d205cfda78460c7078dd980a22572b9111b (diff)
Added thumbnails for news.
-rw-r--r--requirements.txt1
-rw-r--r--sublab_project/news/admin.py3
-rw-r--r--sublab_project/news/migrations/0003_auto__del_field_news_image_height__del_field_news_image_width__chg_fie.py98
-rw-r--r--sublab_project/news/models.py10
-rw-r--r--sublab_project/news/templates/news/news_detail.html9
-rw-r--r--sublab_project/news/templates/news/news_image.html14
-rw-r--r--sublab_project/news/templates/news/news_list.html7
-rw-r--r--sublab_project/news/urls.py3
-rw-r--r--sublab_project/settings.py1
9 files changed, 136 insertions, 10 deletions
diff --git a/requirements.txt b/requirements.txt
index b052966..3ad23d5 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -10,3 +10,4 @@ python-dateutil==1.5
django-celery==2.4.2
redis==2.4.10
django-redisession==0.2
+sorl-thumbnail==11.12
diff --git a/sublab_project/news/admin.py b/sublab_project/news/admin.py
index 0a145f5..ea422e4 100644
--- a/sublab_project/news/admin.py
+++ b/sublab_project/news/admin.py
@@ -1,9 +1,10 @@
from django.contrib import admin
+from sorl.thumbnail.admin import AdminImageMixin
from news.models import News
-class NewsAdmin(admin.ModelAdmin):
+class NewsAdmin(AdminImageMixin, admin.ModelAdmin):
prepopulated_fields = {'slug': ('title',)}
list_display = ('title', 'date_created', 'date_updated')
list_filter = ('author',)
diff --git a/sublab_project/news/migrations/0003_auto__del_field_news_image_height__del_field_news_image_width__chg_fie.py b/sublab_project/news/migrations/0003_auto__del_field_news_image_height__del_field_news_image_width__chg_fie.py
new file mode 100644
index 0000000..47b05ea
--- /dev/null
+++ b/sublab_project/news/migrations/0003_auto__del_field_news_image_height__del_field_news_image_width__chg_fie.py
@@ -0,0 +1,98 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Deleting field 'News.image_height'
+ db.delete_column('news_news', 'image_height')
+
+ # Deleting field 'News.image_width'
+ db.delete_column('news_news', 'image_width')
+
+ # Changing field 'News.image'
+ db.alter_column('news_news', 'image', self.gf('sorl.thumbnail.fields.ImageField')(max_length=100))
+
+
+ def backwards(self, orm):
+
+ # Adding field 'News.image_height'
+ db.add_column('news_news', 'image_height', self.gf('django.db.models.fields.IntegerField')(default=0), keep_default=False)
+
+ # Adding field 'News.image_width'
+ db.add_column('news_news', 'image_width', self.gf('django.db.models.fields.IntegerField')(default=0), keep_default=False)
+
+ # Changing field 'News.image'
+ db.alter_column('news_news', 'image', self.gf('django.db.models.fields.files.ImageField')(max_length=100))
+
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'news.news': {
+ 'Meta': {'ordering': "['-date_created']", 'object_name': 'News'},
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
+ 'content': ('django.db.models.fields.TextField', [], {}),
+ 'content_html': ('django.db.models.fields.TextField', [], {}),
+ 'date_created': ('django.db.models.fields.DateTimeField', [], {}),
+ 'date_updated': ('django.db.models.fields.DateTimeField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'image': ('sorl.thumbnail.fields.ImageField', [], {'max_length': '100', 'blank': 'True'}),
+ 'projects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'news'", 'blank': 'True', 'to': "orm['projects.Project']"}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50', 'db_index': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+ },
+ 'projects.project': {
+ 'Meta': {'ordering': "['name']", 'object_name': 'Project'},
+ 'contact_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'contact_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
+ 'contact_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
+ 'date_created': ('django.db.models.fields.DateTimeField', [], {}),
+ 'date_updated': ('django.db.models.fields.DateTimeField', [], {}),
+ 'description': ('django.db.models.fields.TextField', [], {}),
+ 'description_html': ('django.db.models.fields.TextField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50', 'db_index': 'True'})
+ }
+ }
+
+ complete_apps = ['news']
diff --git a/sublab_project/news/models.py b/sublab_project/news/models.py
index 385dc79..20f0bc3 100644
--- a/sublab_project/news/models.py
+++ b/sublab_project/news/models.py
@@ -2,6 +2,7 @@ import datetime
from django.contrib.auth.models import User
from django.db import models
+from sorl.thumbnail import ImageField
from projects.models import Project
from utils import render_creole
@@ -13,15 +14,12 @@ class News(models.Model):
title = models.CharField('Titel', max_length=255)
slug = models.SlugField('Slug', unique=True)
content = models.TextField('Inhalt',
- help_text='Es kann <a href="http://wikicreole.org/" target="blank">Creole als Markup</a> benutzt werden.')
+ help_text='Es kann <a href="http://wikicreole.org/" target="blank">Creole als Markup</a> benutzt werden.')
content_html = models.TextField(editable=False)
projects = models.ManyToManyField(Project, blank=True,
- related_name='news', verbose_name='Projekte')
+ related_name='news', verbose_name='Projekte')
author = models.ForeignKey(User, editable=False, verbose_name='Autor')
- image = models.ImageField('Bild', upload_to='news',
- height_field='image_height', width_field='image_width', blank=True)
- image_height = models.IntegerField(default=0, editable=False)
- image_width = models.IntegerField(default=0, editable=False)
+ image = ImageField('Bild', upload_to='news', blank=True)
date_created = models.DateTimeField('Erstellungsdatum', editable=False)
date_updated = models.DateTimeField('Aktualisierungsdatum', editable=False)
diff --git a/sublab_project/news/templates/news/news_detail.html b/sublab_project/news/templates/news/news_detail.html
index 918fe60..a91517e 100644
--- a/sublab_project/news/templates/news/news_detail.html
+++ b/sublab_project/news/templates/news/news_detail.html
@@ -1,13 +1,18 @@
{% extends 'base.html' %}
+{% load thumbnail %}
{% block title %}{{ object.title }}{% endblock %}
{% block content %}
<p class="news_date">{{ object.date_updated|date:"DATETIME_FORMAT" }}</p>
- <h2 id="{{ object.slug }}">{{ object.title }}</h3>
+ <h2 id="{{ object.slug }}">{{ object.title }}</h2>
{% if object.image %}
<div class="imagecontent">
- <img src="{{ MEDIA_URL }}{{ object.image }}" width="{{ object.image_width }}" height="{{ object.image_height }}" align="right" />
+ <a href="{% url news_image object.slug %}">
+ {% thumbnail object.image "200" upscale=False as image %}
+ <img src="{{ image.url }}" width="{{ image.width }}" height="{{ image.height }}" align="right" />
+ {% endthumbnail %}
+ </a>
</div>
{% endif %}
{{ object.content_html|safe }}
diff --git a/sublab_project/news/templates/news/news_image.html b/sublab_project/news/templates/news/news_image.html
new file mode 100644
index 0000000..3c490c6
--- /dev/null
+++ b/sublab_project/news/templates/news/news_image.html
@@ -0,0 +1,14 @@
+{% extends 'base.html' %}
+{% load thumbnail %}
+
+{% block title %}Bild: {{ object.title }}{% endblock %}
+
+{% block content %}
+ <h2>Bild: {{ object.title }}</h2>
+ <div>
+ {% thumbnail object.image "820" upscale=False as image %}
+ <img src="{{ image.url }}" width="{{ image.width }}" height="{{ image.height }}" align="left" />
+ {% endthumbnail %}
+ </div>
+ <p><a href="{{ object.get_absolute_url }}">Zurück zum Artikel</a></p>
+{% endblock content %}
diff --git a/sublab_project/news/templates/news/news_list.html b/sublab_project/news/templates/news/news_list.html
index af66c07..fa11311 100644
--- a/sublab_project/news/templates/news/news_list.html
+++ b/sublab_project/news/templates/news/news_list.html
@@ -1,4 +1,5 @@
{% extends 'base.html' %}
+{% load thumbnail %}
{% block title %}Neues{% endblock %}
@@ -10,7 +11,11 @@
</h3>
{% if post.image %}
<div class="imagecontent">
- <img src="{{ MEDIA_URL }}{{ post.image }}" width="{{ post.image_width }}" height="{{ post.image_height }}" align="right" />
+ <a href="{{ post.get_absolute_url }}">
+ {% thumbnail post.image "200" upscale=False as image %}
+ <img src="{{ image.url }}" width="{{ image.width }}" height="{{ image.height }}" align="right" />
+ {% endthumbnail %}
+ </a>
</div>
{% endif %}
{{ post.content_html|safe }}
diff --git a/sublab_project/news/urls.py b/sublab_project/news/urls.py
index c8b1de5..574afd4 100644
--- a/sublab_project/news/urls.py
+++ b/sublab_project/news/urls.py
@@ -10,4 +10,7 @@ urlpatterns = patterns('',
url(r'^rss/$', NewsFeed(), name='news_feed'),
url(r'^atom/$', NewsFeedAtom(), name='news_feed_atom'),
url(r'^(?P<slug>[-\w]+)/$', DetailView.as_view(model=News), name='news_detail'),
+ url(r'^(?P<slug>[-\w]+)/bild/$',
+ DetailView.as_view(model=News, template_name='news/news_image.html'),
+ name='news_image'),
)
diff --git a/sublab_project/settings.py b/sublab_project/settings.py
index bb17fc4..9c65d43 100644
--- a/sublab_project/settings.py
+++ b/sublab_project/settings.py
@@ -139,6 +139,7 @@ INSTALLED_APPS = (
'calendarium',
'accounts',
'redisession',
+ 'sorl.thumbnail',
)
# A sample logging configuration. The only tangible logging