diff --git a/config/settings/common.py b/config/settings/common.py index bfa83f5..48238a1 100644 --- a/config/settings/common.py +++ b/config/settings/common.py @@ -382,7 +382,7 @@ EDITOR_INCLUDE_JAVASCRIPT = False MARTOR_ENABLE_CONFIGS = { 'imgur': 'true', # to enable/disable imgur uploader/custom uploader. 'mention': 'true', # to enable/disable mention - 'jquery': 'false', # to include/revoke jquery (require for admin default django) + 'jquery': 'true', # to include/revoke jquery (require for admin default django) } MARTOR_UPLOAD_PATH = 'images/uploads/{}'.format(time.strftime("%Y/%m/%d/")) MARTOR_UPLOAD_URL = '/api/uploader/' # change to local uploader diff --git a/mhackspace/base/migrations/0001_initial.py b/mhackspace/base/migrations/0001_initial.py index 0309111..ac0b0b1 100644 --- a/mhackspace/base/migrations/0001_initial.py +++ b/mhackspace/base/migrations/0001_initial.py @@ -6,27 +6,50 @@ from django.db import migrations, models import django.utils.timezone import stdimage.models import stdimage.utils +import dynamic_filenames class Migration(migrations.Migration): initial = True - dependencies = [ - ] + dependencies = [] operations = [ migrations.CreateModel( - name='BannerImages', + name="BannerImages", fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('url', models.URLField()), - ('title', models.CharField(max_length=255)), - ('displayed', models.BooleanField(default=True)), - ('original_image', models.URLField(blank=True, max_length=255, null=True)), - ('scaled_image', stdimage.models.StdImageField(blank=True, null=True, upload_to=stdimage.utils.UploadToAutoSlugClassNameDir('title'))), - ('caption', models.TextField()), - ('date', models.DateTimeField(default=django.utils.timezone.now)), + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("url", models.URLField()), + ("title", models.CharField(max_length=255)), + ("displayed", models.BooleanField(default=True)), + ( + "original_image", + models.URLField(blank=True, max_length=255, null=True), + ), + ( + "scaled_image", + stdimage.models.StdImageField( + blank=True, + null=True, + upload_to=dynamic_filenames.FilePattern( + filename_pattern="{model_name}/{instance.title:slug}{ext}" + ), + ), + ), + ("caption", models.TextField()), + ( + "date", + models.DateTimeField(default=django.utils.timezone.now), + ), ], - ), + ) ] diff --git a/mhackspace/base/migrations/0002_auto_20170214_1911.py b/mhackspace/base/migrations/0002_auto_20170214_1911.py index 9b9c3b2..2e1586b 100644 --- a/mhackspace/base/migrations/0002_auto_20170214_1911.py +++ b/mhackspace/base/migrations/0002_auto_20170214_1911.py @@ -6,18 +6,24 @@ from django.db import migrations import stdimage.models import stdimage.utils import stdimage.validators +import dynamic_filenames class Migration(migrations.Migration): - dependencies = [ - ('base', '0001_initial'), - ] + dependencies = [("base", "0001_initial")] operations = [ migrations.AlterField( - model_name='bannerimages', - name='scaled_image', - field=stdimage.models.StdImageField(blank=True, null=True, upload_to=stdimage.utils.UploadToAutoSlugClassNameDir('title'), validators=[stdimage.validators.MinSizeValidator(800, 600)]), - ), + model_name="bannerimages", + name="scaled_image", + field=stdimage.models.StdImageField( + blank=True, + null=True, + upload_to=dynamic_filenames.FilePattern( + filename_pattern="{model_name}/{instance.title:slug}{ext}" + ), + validators=[stdimage.validators.MinSizeValidator(800, 600)], + ), + ) ] diff --git a/mhackspace/base/migrations/0003_auto_20170215_2146.py b/mhackspace/base/migrations/0003_auto_20170215_2146.py index 3ade02c..7333fa1 100644 --- a/mhackspace/base/migrations/0003_auto_20170215_2146.py +++ b/mhackspace/base/migrations/0003_auto_20170215_2146.py @@ -6,18 +6,24 @@ from django.db import migrations import stdimage.models import stdimage.utils import stdimage.validators +import dynamic_filenames class Migration(migrations.Migration): - dependencies = [ - ('base', '0002_auto_20170214_1911'), - ] + dependencies = [("base", "0002_auto_20170214_1911")] operations = [ migrations.AlterField( - model_name='bannerimage', - name='scaled_image', - field=stdimage.models.StdImageField(blank=True, null=True, upload_to=stdimage.utils.UploadToAutoSlugClassNameDir('title'), validators=[stdimage.validators.MinSizeValidator(1200, 300)]), - ), + model_name="bannerimage", + name="scaled_image", + field=stdimage.models.StdImageField( + blank=True, + null=True, + upload_to=dynamic_filenames.FilePattern( + filename_pattern="{model_name}/{instance.title:slug}{ext}" + ), + validators=[stdimage.validators.MinSizeValidator(1200, 300)], + ), + ) ] diff --git a/mhackspace/base/migrations/0003_auto_20170222_2055.py b/mhackspace/base/migrations/0003_auto_20170222_2055.py index f83fc55..f5f2adb 100644 --- a/mhackspace/base/migrations/0003_auto_20170222_2055.py +++ b/mhackspace/base/migrations/0003_auto_20170222_2055.py @@ -7,29 +7,52 @@ import django.utils.timezone import stdimage.models import stdimage.utils import stdimage.validators +import dynamic_filenames class Migration(migrations.Migration): - dependencies = [ - ('base', '0002_auto_20170214_1911'), - ] + dependencies = [("base", "0002_auto_20170214_1911")] operations = [ migrations.CreateModel( - name='BannerImage', + name="BannerImage", fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('url', models.URLField()), - ('title', models.CharField(max_length=255)), - ('displayed', models.BooleanField(default=True)), - ('original_image', models.URLField(blank=True, max_length=255, null=True)), - ('scaled_image', stdimage.models.StdImageField(blank=True, null=True, upload_to=stdimage.utils.UploadToAutoSlugClassNameDir('title'), validators=[stdimage.validators.MinSizeValidator(1200, 300)])), - ('caption', models.TextField()), - ('date', models.DateTimeField(default=django.utils.timezone.now)), + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("url", models.URLField()), + ("title", models.CharField(max_length=255)), + ("displayed", models.BooleanField(default=True)), + ( + "original_image", + models.URLField(blank=True, max_length=255, null=True), + ), + ( + "scaled_image", + stdimage.models.StdImageField( + blank=True, + null=True, + upload_to=dynamic_filenames.FilePattern( + filename_pattern="{model_name}/{instance.title:slug}{ext}" + ), + validators=[ + stdimage.validators.MinSizeValidator(1200, 300) + ], + ), + ), + ("caption", models.TextField()), + ( + "date", + models.DateTimeField(default=django.utils.timezone.now), + ), ], ), - migrations.DeleteModel( - name='BannerImages', - ), + migrations.DeleteModel(name="BannerImages"), ] diff --git a/mhackspace/base/migrations/0005_auto_20170228_2210.py b/mhackspace/base/migrations/0005_auto_20170228_2210.py index 0e923a9..958e3bc 100644 --- a/mhackspace/base/migrations/0005_auto_20170228_2210.py +++ b/mhackspace/base/migrations/0005_auto_20170228_2210.py @@ -6,6 +6,7 @@ from django.db import migrations import stdimage.models import stdimage.utils import stdimage.validators +import dynamic_filenames class Migration(migrations.Migration): @@ -26,7 +27,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='bannerimage', name='image', - field=stdimage.models.StdImageField(default='', upload_to=stdimage.utils.UploadToAutoSlugClassNameDir('title'), validators=[stdimage.validators.MinSizeValidator(1200, 300)]), + field=stdimage.models.StdImageField(default='', upload_to=dynamic_filenames.FilePattern(filename_pattern="{model_name}/{instance.title:slug}{ext}"), validators=[stdimage.validators.MinSizeValidator(1200, 300)]), preserve_default=False, ), ] diff --git a/mhackspace/base/migrations/0006_added_excerpt.py b/mhackspace/base/migrations/0006_added_excerpt.py index b551355..0cf3d7b 100644 --- a/mhackspace/base/migrations/0006_added_excerpt.py +++ b/mhackspace/base/migrations/0006_added_excerpt.py @@ -6,18 +6,22 @@ from django.db import migrations import stdimage.models import stdimage.utils import stdimage.validators +import dynamic_filenames class Migration(migrations.Migration): - dependencies = [ - ('base', '0005_auto_20170228_2210'), - ] + dependencies = [("base", "0005_auto_20170228_2210")] operations = [ migrations.AlterField( - model_name='bannerimage', - name='image', - field=stdimage.models.StdImageField(upload_to=stdimage.utils.UploadToAutoSlugClassNameDir('title'), validators=[stdimage.validators.MinSizeValidator(2400, 600)]), - ), + model_name="bannerimage", + name="image", + field=stdimage.models.StdImageField( + upload_to=dynamic_filenames.FilePattern( + filename_pattern="{model_name}/{instance.title:slug}{ext}" + ), + validators=[stdimage.validators.MinSizeValidator(2400, 600)], + ), + ) ] diff --git a/mhackspace/base/models.py b/mhackspace/base/models.py index 123a75b..94bcf8c 100644 --- a/mhackspace/base/models.py +++ b/mhackspace/base/models.py @@ -5,51 +5,39 @@ from django.conf import settings from django.contrib.sites.models import Site from django.utils import timezone from stdimage.models import StdImageField -from stdimage.utils import UploadToAutoSlugClassNameDir +from dynamic_filenames import FilePattern from stdimage.validators import MinSizeValidator from spirit.comment.models import Comment from spirit.topic.models import Topic from wiki.models.article import ArticleRevision -# from django.contrib.auth.models import User + from django.core.mail import EmailMessage from django.db.models.signals import post_save from mhackspace.base.tasks import matrix_message +upload_to_pattern = FilePattern( + filename_pattern="{model_name}/{instance.title:slug}{ext}" +) + + class BannerImage(models.Model): url = models.URLField() title = models.CharField(max_length=255) displayed = models.BooleanField(default=True) image = StdImageField( - upload_to=UploadToAutoSlugClassNameDir(populate_from='title'), + upload_to=upload_to_pattern, variations={ - 'small': { - "width": 400, - "height": 300, - "crop": True}, - 'small2x': { - "width": 800, - "height": 600, - "crop": True}, - 'medium': { - "width": 800, - "height": 300, - "crop": True}, - 'medium2x': { - "width": 1600, - "height": 600, - "crop": True}, - 'large': { - "width": 1200, - "height": 300, - "crop": True}, - 'large2x': { - "width": 2400, - "height": 600, - "crop": True}}, - validators=[ - MinSizeValidator(2400, 600)]) + "small": {"width": 400, "height": 300, "crop": True}, + "small2x": {"width": 800, "height": 600, "crop": True}, + "medium": {"width": 800, "height": 300, "crop": True}, + "medium2x": {"width": 1600, "height": 600, "crop": True}, + "large": {"width": 1200, "height": 300, "crop": True}, + "large2x": {"width": 2400, "height": 600, "crop": True}, + }, + validators=[MinSizeValidator(2400, 600)], + ) caption = models.TextField() date = models.DateTimeField(default=timezone.now) @@ -64,33 +52,46 @@ def send_topic_update_email(sender, instance, **kwargs): addresses = {comment.user.email for comment in comments} for user_email in addresses: email = EmailMessage( - '[%s] - %s' % (settings.MSG_PREFIX, instance.topic.title), - 'A topic you have interacted with has been updated click link to see new comments %s' % instance.get_absolute_url(), - 'no-reply@maidstone-hackspace.org.uk', + "[%s] - %s" % (settings.MSG_PREFIX, instance.topic.title), + "A topic you have interacted with has been updated click link to see new comments %s" + % instance.get_absolute_url(), + "no-reply@maidstone-hackspace.org.uk", to=[user_email], - headers={'Reply-To': 'no-reply@maidstone-hackspace.org.uk'}) + headers={"Reply-To": "no-reply@maidstone-hackspace.org.uk"}, + ) email.send() - matrix_message.delay('https://%s%s' % ( - Site.objects.get_current().domain, - instance.topic.get_absolute_url())) + matrix_message.delay( + "https://%s%s" + % ( + Site.objects.get_current().domain, + instance.topic.get_absolute_url(), + ) + ) def wiki_article_updated(sender, instance, **kwargs): - matrix_message.delay('https://%s%s' % ( - Site.objects.get_current().domain, - instance.article.get_absolute_url())) + matrix_message.delay( + "https://%s%s" + % ( + Site.objects.get_current().domain, + instance.article.get_absolute_url(), + ) + ) def send_new_topic_notification(sender, instance, **kwargs): - matrix_message.delay('https://%s%s' % ( - Site.objects.get_current().domain, - instance.get_absolute_url())) + matrix_message.delay( + "https://%s%s" + % (Site.objects.get_current().domain, instance.get_absolute_url()) + ) email = EmailMessage( - '[%s - TOPIC] - %s' % (settings.MSG_PREFIX, instance), - 'A new topic has been created, click link to view %s' % instance.get_absolute_url(), + "[%s - TOPIC] - %s" % (settings.MSG_PREFIX, instance), + "A new topic has been created, click link to view %s" + % instance.get_absolute_url(), settings.EMAIL_MAILING_LIST, to=[settings.EMAIL_MAILING_LIST], - headers={'Reply-To': settings.EMAIL_MAILING_LIST}) + headers={"Reply-To": settings.EMAIL_MAILING_LIST}, + ) email.send() diff --git a/mhackspace/blog/migrations/0001_initial.py b/mhackspace/blog/migrations/0001_initial.py index ddf2980..ace4bb8 100644 --- a/mhackspace/blog/migrations/0001_initial.py +++ b/mhackspace/blog/migrations/0001_initial.py @@ -8,37 +8,68 @@ import django.db.models.deletion import django.utils.timezone import stdimage.models import stdimage.utils +import dynamic_filenames class Migration(migrations.Migration): initial = True - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] + dependencies = [migrations.swappable_dependency(settings.AUTH_USER_MODEL)] operations = [ migrations.CreateModel( - name='Category', + name="Category", fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=30)), + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("name", models.CharField(max_length=30)), ], ), migrations.CreateModel( - name='Post', + name="Post", fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=30)), - ('image', stdimage.models.StdImageField(blank=True, null=True, upload_to=stdimage.utils.UploadToAutoSlugClassNameDir('title'))), - ('description', models.TextField()), - ('date', models.DateTimeField(default=django.utils.timezone.now)), - ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ('categories', models.ManyToManyField(to='blog.Category')), + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("title", models.CharField(max_length=30)), + ( + "image", + stdimage.models.StdImageField( + blank=True, + null=True, + upload_to=dynamic_filenames.FilePattern( + filename_pattern="{model_name}/{instance.title:slug}{ext}" + ), + ), + ), + ("description", models.TextField()), + ( + "date", + models.DateTimeField(default=django.utils.timezone.now), + ), + ( + "author", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to=settings.AUTH_USER_MODEL, + ), + ), + ("categories", models.ManyToManyField(to="blog.Category")), ], - options={ - 'ordering': ('date',), - }, + options={"ordering": ("date",)}, ), ] diff --git a/mhackspace/blog/migrations/0005_added_excerpt.py b/mhackspace/blog/migrations/0005_added_excerpt.py index ab8eb5c..875dd8f 100644 --- a/mhackspace/blog/migrations/0005_added_excerpt.py +++ b/mhackspace/blog/migrations/0005_added_excerpt.py @@ -6,27 +6,32 @@ from django.db import migrations, models import stdimage.models import stdimage.utils import stdimage.validators +import dynamic_filenames class Migration(migrations.Migration): - dependencies = [ - ('blog', '0004_auto_20170228_2210'), - ] + dependencies = [("blog", "0004_auto_20170228_2210")] operations = [ migrations.AlterModelOptions( - name='post', - options={'ordering': ('-published_date',)}, + name="post", options={"ordering": ("-published_date",)} ), migrations.AddField( - model_name='post', - name='excerpt', + model_name="post", + name="excerpt", field=models.TextField(blank=True, null=True), ), migrations.AlterField( - model_name='post', - name='image', - field=stdimage.models.StdImageField(blank=True, null=True, upload_to=stdimage.utils.UploadToAutoSlugClassNameDir('title'), validators=[stdimage.validators.MinSizeValidator(730, 410)]), + model_name="post", + name="image", + field=stdimage.models.StdImageField( + blank=True, + null=True, + upload_to=dynamic_filenames.FilePattern( + filename_pattern="{model_name}/{instance.title:slug}{ext}" + ), + validators=[stdimage.validators.MinSizeValidator(730, 410)], + ), ), ] diff --git a/mhackspace/blog/models.py b/mhackspace/blog/models.py index a373047..d6180b6 100644 --- a/mhackspace/blog/models.py +++ b/mhackspace/blog/models.py @@ -5,10 +5,15 @@ from django.urls import reverse from martor.models import MartorField from stdimage.validators import MinSizeValidator from stdimage.models import StdImageField -from stdimage.utils import UploadToAutoSlugClassNameDir +from dynamic_filenames import FilePattern + from mhackspace.users.models import User +upload_to_pattern = FilePattern( + filename_pattern="{model_name}/{instance.title:slug}{ext}" +) + class Category(models.Model): name = models.CharField(max_length=100) @@ -28,7 +33,7 @@ class Post(models.Model): categories = models.ManyToManyField(Category) author = models.ForeignKey(User, on_delete=models.CASCADE) image = StdImageField( - upload_to=UploadToAutoSlugClassNameDir(populate_from="title"), + upload_to=upload_to_pattern, blank=True, null=True, variations={ diff --git a/mhackspace/feeds/migrations/0001_initial.py b/mhackspace/feeds/migrations/0001_initial.py index 4a5c9b9..23b8cc6 100644 --- a/mhackspace/feeds/migrations/0001_initial.py +++ b/mhackspace/feeds/migrations/0001_initial.py @@ -7,45 +7,87 @@ import django.db.models.deletion import django.utils.timezone import stdimage.models import stdimage.utils +import dynamic_filenames class Migration(migrations.Migration): initial = True - dependencies = [ - ] + dependencies = [] operations = [ migrations.CreateModel( - name='Article', + name="Article", fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('url', models.URLField()), - ('title', models.CharField(max_length=255)), - ('original_image', models.URLField(blank=True, max_length=255, null=True)), - ('image', stdimage.models.StdImageField(blank=True, null=True, upload_to=stdimage.utils.UploadToAutoSlugClassNameDir('title'))), - ('description', models.TextField()), - ('displayed', models.BooleanField(default=True)), - ('date', models.DateTimeField(default=django.utils.timezone.now)), + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("url", models.URLField()), + ("title", models.CharField(max_length=255)), + ( + "original_image", + models.URLField(blank=True, max_length=255, null=True), + ), + ( + "image", + stdimage.models.StdImageField( + blank=True, + null=True, + upload_to=dynamic_filenames.FilePattern( + filename_pattern="{model_name}/{instance.title:slug}{ext}" + ), + ), + ), + ("description", models.TextField()), + ("displayed", models.BooleanField(default=True)), + ( + "date", + models.DateTimeField(default=django.utils.timezone.now), + ), ], ), migrations.CreateModel( - name='Feed', + name="Feed", fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('home_url', models.URLField(verbose_name='Site Home Page')), - ('feed_url', models.URLField(verbose_name='RSS Feed URL')), - ('title', models.CharField(max_length=255)), - ('author', models.CharField(max_length=255)), - ('tags', models.CharField(blank=True, max_length=255)), - ('image', stdimage.models.StdImageField(blank=True, null=True, upload_to=stdimage.utils.UploadToAutoSlugClassNameDir('title'))), - ('enabled', models.BooleanField(default=True)), + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("home_url", models.URLField(verbose_name="Site Home Page")), + ("feed_url", models.URLField(verbose_name="RSS Feed URL")), + ("title", models.CharField(max_length=255)), + ("author", models.CharField(max_length=255)), + ("tags", models.CharField(blank=True, max_length=255)), + ( + "image", + stdimage.models.StdImageField( + blank=True, + null=True, + upload_to=dynamic_filenames.FilePattern( + filename_pattern="{model_name}/{instance.title:slug}{ext}" + ), + ), + ), + ("enabled", models.BooleanField(default=True)), ], ), migrations.AddField( - model_name='article', - name='feed', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='feeds.Feed'), + model_name="article", + name="feed", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="feeds.Feed" + ), ), ] diff --git a/mhackspace/feeds/models.py b/mhackspace/feeds/models.py index d24f1d0..773e1a5 100644 --- a/mhackspace/feeds/models.py +++ b/mhackspace/feeds/models.py @@ -5,10 +5,13 @@ from django.db import models from django.utils import timezone from django.utils.encoding import python_2_unicode_compatible from stdimage.models import StdImageField -from stdimage.utils import UploadToAutoSlugClassNameDir +from dynamic_filenames import FilePattern image_variations = {"home": {"width": 530, "height": 220, "crop": True}} +upload_to_pattern = FilePattern( + filename_pattern="{model_name}/{instance.title:slug}{ext}" +) @python_2_unicode_compatible @@ -19,7 +22,7 @@ class Feed(models.Model): author = models.CharField(max_length=255) tags = models.CharField(max_length=255, blank=True) image = StdImageField( - upload_to=UploadToAutoSlugClassNameDir(populate_from="title"), + upload_to=upload_to_pattern, blank=True, null=True, variations=image_variations, @@ -36,7 +39,7 @@ class Article(models.Model): title = models.CharField(max_length=255) original_image = models.URLField(max_length=255, blank=True, null=True) image = StdImageField( - upload_to=UploadToAutoSlugClassNameDir(populate_from="title"), + upload_to=upload_to_pattern, blank=True, null=True, variations=image_variations, diff --git a/mhackspace/requests/views.py b/mhackspace/requests/views.py index 240b7f4..1da82c2 100644 --- a/mhackspace/requests/views.py +++ b/mhackspace/requests/views.py @@ -46,7 +46,7 @@ class RequestsDetail(LoginRequiredMixin, DetailView): def get_context_data(self, *args, **kwargs): context = super(RequestsDetail, self).get_context_data(*args, **kwargs) - context['requests_comments'] = UserRequestsComment.objects.all() + context['request_comments'] = UserRequestsComment.objects.all() context['form'] = UserRequestFormComment return context diff --git a/mhackspace/templates/pages/requests-detail.html b/mhackspace/templates/pages/requests-detail.html index a761ba1..ba3e496 100644 --- a/mhackspace/templates/pages/requests-detail.html +++ b/mhackspace/templates/pages/requests-detail.html @@ -6,24 +6,27 @@ {% block head-open-graph %} - + {% endblock head-open-graph %} {% block content %} -

{{requests.title}}

+

{{request_detail.title}}

- {{requests.description}} + {{request_detail.description}}
- {% for comment in requests_comments %} + {% for comment in request_comments %} {{ comment.user }}

{{ comment.comment }}

{% endfor %} - +
+
+
+

Add comments below

{% if form %}
{% csrf_token %} diff --git a/mhackspace/templates/partials/form.html b/mhackspace/templates/partials/form.html index 2e0eab2..18ae895 100644 --- a/mhackspace/templates/partials/form.html +++ b/mhackspace/templates/partials/form.html @@ -27,5 +27,6 @@ - + + {% endaddtoblock %} diff --git a/requirements/base.txt b/requirements/base.txt index 0ee1a7d..333638e 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -5,14 +5,14 @@ wheel==0.31.1 # Bleeding edge Django django==2.1.1 - +django-dynamic-filenames==1.1.3 # Configuration django-environ==0.4.5 whitenoise==4.0 # Static and Media Storage # ------------------------------------------------ -boto3==1.8.6 -django-storages==1.7 +boto3==1.9.1 +django-storages==1.7.1 # django-storages-redux==1.3.2 @@ -24,7 +24,7 @@ django-extensions==2.1.2 Werkzeug==0.14.1 # Models -django-stdimage==3.2.0 +django-stdimage==4.0.0 django-model-utils==3.1.2 # Images @@ -56,7 +56,7 @@ django-compressor==2.2 #django-sass-processor==0.5.7 git+https://github.com/jrief/django-sass-processor.git libsass==0.14.5 -lxml==4.2.4 +lxml==4.2.5 # WSGI Handler # ------------------------------------------------ @@ -68,7 +68,7 @@ gunicorn==19.9.0 # Your custom requirements go here mock==2.0.0 -gocardless_pro +gocardless_pro==1.8.0 braintree==3.48.0 django-autofixture==0.12.1 @@ -79,17 +79,18 @@ git+git://github.com/django-wiki/django-wiki.git djangorestframework==3.8.2 djangorestframework-jwt==1.11.0 -django-filter==2.0 -coreapi +django-filter==2.0.0 +coreapi==2.3.3 # api libraries end martor==1.3.2 #git+git://github.com/olymk2/django-markdown-editor.git -django-spirit==0.6.0 -django-djconfig -django-haystack +django-spirit==0.6.1 +django-djconfig==0.8.0 +django-haystack==2.8.1 +git+https://github.com/nitely/Spirit.git django-xforwardedfor-middleware==2.0 # Application queue celery @@ -97,9 +98,9 @@ celery==4.2.1 django-celery-results==1.0.1 django-celery-beat==1.1.1 -argon2-cffi -django-cors-headers -python-magic -ldap3 +argon2-cffi==18.3.0 +django-cors-headers==2.4.0 +python-magic==0.4.15 +ldap3==2.5.1 bcrypt==3.1.4 python-twitter==3.4.2 diff --git a/requirements/production.txt b/requirements/production.txt index c8dcdf7..e91ce5d 100644 --- a/requirements/production.txt +++ b/requirements/production.txt @@ -4,7 +4,7 @@ # Email backends for Mailgun, Postmark, SendGrid and more # ------------------------------------------------------- -django-anymail==0.10 +django-anymail==4.2