From 1347410c5125775f8b84bff0d12086158c39bea0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Zapke-Gru=CC=88ndemann?= Date: Fri, 30 Dec 2011 03:57:10 +0100 Subject: Added image for news posts. --- .gitignore | 3 +- conf/dev_settings.py | 8 ++ requirements.txt | 3 +- ...__add_field_news_image_height__add_field_new.py | 100 +++++++++++++++++++++ sublab_project/news/models.py | 6 +- .../news/templates/news/news_detail.html | 5 +- sublab_project/news/templates/news/news_list.html | 5 +- sublab_project/urls.py | 5 +- 8 files changed, 127 insertions(+), 8 deletions(-) create mode 100644 sublab_project/news/migrations/0002_auto__add_field_news_image__add_field_news_image_height__add_field_new.py diff --git a/.gitignore b/.gitignore index 14b79dd..480e72e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ *.db -sublab_project/local_settings.py *.pyc *.swp +media +sublab_project/local_settings.py diff --git a/conf/dev_settings.py b/conf/dev_settings.py index 1953653..d5cefb7 100644 --- a/conf/dev_settings.py +++ b/conf/dev_settings.py @@ -2,6 +2,7 @@ import os from settings import SITE_ROOT, INSTALLED_APPS, MIDDLEWARE_CLASSES + DEBUG = True TEMPLATE_DEBUG = DEBUG @@ -12,7 +13,14 @@ DATABASES = { } } +MEDIA_ROOT = os.path.join(SITE_ROOT, 'media') +if not os.path.exists(MEDIA_ROOT): + os.mkdir(MEDIA_ROOT) + +MEDIA_URL = '/media/' + INSTALLED_APPS += ('debug_toolbar',) + MIDDLEWARE_CLASSES += ('debug_toolbar.middleware.DebugToolbarMiddleware',) INTERNAL_IPS = ('127.0.0.1') diff --git a/requirements.txt b/requirements.txt index 1dc77a1..2bd7e3d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,5 @@ Django==1.3.1 South==0.7.3 gunicorn==0.13.4 -django-debug-toolbar==0.8.5 creole==1.2 - +PIL==1.1.7 diff --git a/sublab_project/news/migrations/0002_auto__add_field_news_image__add_field_news_image_height__add_field_new.py b/sublab_project/news/migrations/0002_auto__add_field_news_image__add_field_news_image_height__add_field_new.py new file mode 100644 index 0000000..c9a6744 --- /dev/null +++ b/sublab_project/news/migrations/0002_auto__add_field_news_image__add_field_news_image_height__add_field_new.py @@ -0,0 +1,100 @@ +# 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): + + # Adding field 'News.image' + db.add_column('news_news', 'image', self.gf('django.db.models.fields.files.ImageField')(default='', max_length=100, blank=True), keep_default=False) + + # 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) + + + def backwards(self, orm): + + # Deleting field 'News.image' + db.delete_column('news_news', 'image') + + # Deleting field 'News.image_height' + db.delete_column('news_news', 'image_height') + + # Deleting field 'News.image_width' + db.delete_column('news_news', 'image_width') + + + 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_updated']", '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': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'blank': 'True'}), + 'image_height': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'image_width': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + '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 cd98248..385dc79 100644 --- a/sublab_project/news/models.py +++ b/sublab_project/news/models.py @@ -18,11 +18,15 @@ class News(models.Model): projects = models.ManyToManyField(Project, blank=True, 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) date_created = models.DateTimeField('Erstellungsdatum', editable=False) date_updated = models.DateTimeField('Aktualisierungsdatum', editable=False) class Meta: - ordering = ['date_updated'] + ordering = ['-date_created'] verbose_name = 'News' verbose_name_plural = 'News' diff --git a/sublab_project/news/templates/news/news_detail.html b/sublab_project/news/templates/news/news_detail.html index e3a0de1..49d2b7a 100644 --- a/sublab_project/news/templates/news/news_detail.html +++ b/sublab_project/news/templates/news/news_detail.html @@ -5,6 +5,9 @@ {% block content %}

{{ object.date_updated|date:"DATETIME_FORMAT" }}

{{ object.title }}

-

{{ object.content_html|safe }}

+

+ {% if object.image %}{% endif %} + {{ object.content_html|safe }} +

{{ object.author }}

{% endblock content %} diff --git a/sublab_project/news/templates/news/news_list.html b/sublab_project/news/templates/news/news_list.html index ea46320..52ded72 100644 --- a/sublab_project/news/templates/news/news_list.html +++ b/sublab_project/news/templates/news/news_list.html @@ -6,7 +6,10 @@

{{ post.date_updated|date }} - {{ post.title }}

-

{{ post.content_html|safe }}

+

+ {% if post.image %}{% endif %} + {{ post.content_html|safe }} +

{% endfor %} {% if is_paginated %}

diff --git a/sublab_project/urls.py b/sublab_project/urls.py index b853b29..89dac80 100644 --- a/sublab_project/urls.py +++ b/sublab_project/urls.py @@ -1,5 +1,6 @@ +from django.conf import settings from django.conf.urls.defaults import patterns, include, url -from django.views.generic import TemplateView +from django.conf.urls.static import static # Uncomment the next two lines to enable the admin: from django.contrib import admin @@ -13,4 +14,4 @@ urlpatterns = patterns('', url(r'^admin/', include(admin.site.urls)), url(r'^projekte/', include('projects.urls')), url(r'^', include('news.urls')), -) +) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) -- cgit v1.2.1