diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index e46c5209a..f8c572331 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -53,6 +53,7 @@ Listed in alphabetical order. Andy Rose Anna Callahan `@jazztpt`_ Antonia Blair `@antoniablair`_ @antoniablairart + Arcuri Davide `@dadokkio`_ Areski Belaid `@areski`_ Ashley Camba Barclay Gauld `@yunti`_ diff --git a/requirements.txt b/requirements.txt index b6f1a0af3..e11c9da38 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,8 +4,8 @@ sh==1.12.14 binaryornot==0.4.4 # Testing -pytest==3.2.1 +pytest==3.2.2 pep8==1.7.0 pyflakes==1.6.0 -tox==2.8.0 +tox==2.8.2 pytest-cookies==0.2.0 diff --git a/{{cookiecutter.project_slug}}/.gitignore b/{{cookiecutter.project_slug}}/.gitignore index 4ef36b789..207d2044d 100644 --- a/{{cookiecutter.project_slug}}/.gitignore +++ b/{{cookiecutter.project_slug}}/.gitignore @@ -342,3 +342,9 @@ mailhog {% endif %} {{ cookiecutter.project_slug }}/media/ + +{% if cookiecutter.use_docker == 'y' -%} +# Added to maintain local compose files which are ignored by something above. +# See issue https://github.com/pydanny/cookiecutter-django/issues/1321 +!/compose/local/ +{% endif %} diff --git a/{{cookiecutter.project_slug}}/compose/caddy/Dockerfile b/{{cookiecutter.project_slug}}/compose/caddy/Dockerfile deleted file mode 100644 index 774b0bf5b..000000000 --- a/{{cookiecutter.project_slug}}/compose/caddy/Dockerfile +++ /dev/null @@ -1,2 +0,0 @@ -FROM abiosoft/caddy:0.10.6 -COPY Caddyfile /etc/Caddyfile diff --git a/{{cookiecutter.project_slug}}/compose/django/Dockerfile b/{{cookiecutter.project_slug}}/compose/django/Dockerfile deleted file mode 100644 index 618533f7d..000000000 --- a/{{cookiecutter.project_slug}}/compose/django/Dockerfile +++ /dev/null @@ -1,29 +0,0 @@ -FROM python:3.5 - -ENV PYTHONUNBUFFERED 1 - -RUN groupadd -r django \ - && useradd -r -g django django - -# Requirements have to be pulled and installed here, otherwise caching won't work -COPY ./requirements /requirements -RUN pip install --no-cache-dir -r /requirements/production.txt \ - && rm -rf /requirements - -COPY ./compose/django/gunicorn.sh ./compose/django/entrypoint.sh / -RUN sed -i 's/\r//' /entrypoint.sh \ - && sed -i 's/\r//' /gunicorn.sh \ - && chmod +x /entrypoint.sh \ - && chown django /entrypoint.sh \ - && chmod +x /gunicorn.sh \ - && chown django /gunicorn.sh - -COPY . /app - -RUN chown -R django /app - -USER django - -WORKDIR /app - -ENTRYPOINT ["/entrypoint.sh"] diff --git a/{{cookiecutter.project_slug}}/compose/django/Dockerfile-local b/{{cookiecutter.project_slug}}/compose/django/Dockerfile-local deleted file mode 100644 index d2c56532a..000000000 --- a/{{cookiecutter.project_slug}}/compose/django/Dockerfile-local +++ /dev/null @@ -1,26 +0,0 @@ -FROM python:3.5 -ENV PYTHONUNBUFFERED 1 - -# Requirements have to be pulled and installed here, otherwise caching won't work -COPY ./requirements /requirements -RUN pip install -r /requirements/local.txt - -COPY ./compose/django/entrypoint.sh /entrypoint.sh -RUN sed -i 's/\r//' /entrypoint.sh -RUN chmod +x /entrypoint.sh - -COPY ./compose/django/start-dev.sh /start-dev.sh -RUN sed -i 's/\r//' /start-dev.sh -RUN chmod +x /start-dev.sh - -COPY ./compose/django/celery/worker/start-dev.sh /start-celeryworker-dev.sh -RUN sed -i 's/\r//' /start-celeryworker-dev.sh -RUN chmod +x /start-celeryworker-dev.sh - -COPY ./compose/django/celery/beat/start-dev.sh /start-celerybeat-dev.sh -RUN sed -i 's/\r//' /start-celerybeat-dev.sh -RUN chmod +x /start-celerybeat-dev.sh - -WORKDIR /app - -ENTRYPOINT ["/entrypoint.sh"] diff --git a/{{cookiecutter.project_slug}}/compose/django/start-dev.sh b/{{cookiecutter.project_slug}}/compose/django/start-dev.sh deleted file mode 100644 index 04e06981f..000000000 --- a/{{cookiecutter.project_slug}}/compose/django/start-dev.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -python manage.py migrate -python manage.py runserver_plus 0.0.0.0:8000 diff --git a/{{cookiecutter.project_slug}}/compose/local/django/Dockerfile b/{{cookiecutter.project_slug}}/compose/local/django/Dockerfile new file mode 100644 index 000000000..e62b524a4 --- /dev/null +++ b/{{cookiecutter.project_slug}}/compose/local/django/Dockerfile @@ -0,0 +1,27 @@ +FROM python:3.5 + +ENV PYTHONUNBUFFERED 1 + +# Requirements have to be pulled and installed here, otherwise caching won't work +COPY ./requirements /requirements +RUN pip install -r /requirements/local.txt + +COPY ./compose/production/django/entrypoint.sh /entrypoint.sh +RUN sed -i 's/\r//' /entrypoint.sh +RUN chmod +x /entrypoint.sh + +COPY ./compose/local/django/start.sh /start.sh +RUN sed -i 's/\r//' /start.sh +RUN chmod +x /start.sh + +COPY ./compose/local/django/celery/worker/start.sh /start-celeryworker.sh +RUN sed -i 's/\r//' /start-celeryworker.sh +RUN chmod +x /start-celeryworker.sh + +COPY ./compose/local/django/celery/beat/start.sh /start-celerybeat.sh +RUN sed -i 's/\r//' /start-celerybeat.sh +RUN chmod +x /start-celerybeat.sh + +WORKDIR /app + +ENTRYPOINT ["/entrypoint.sh"] diff --git a/{{cookiecutter.project_slug}}/compose/django/celery/beat/start-dev.sh b/{{cookiecutter.project_slug}}/compose/local/django/celery/beat/start.sh similarity index 78% rename from {{cookiecutter.project_slug}}/compose/django/celery/beat/start-dev.sh rename to {{cookiecutter.project_slug}}/compose/local/django/celery/beat/start.sh index 987d7259e..c26318b44 100644 --- a/{{cookiecutter.project_slug}}/compose/django/celery/beat/start-dev.sh +++ b/{{cookiecutter.project_slug}}/compose/local/django/celery/beat/start.sh @@ -1,8 +1,10 @@ -#!/bin/sh +#!/usr/bin/env bash set -o errexit +set -o pipefail set -o nounset set -o xtrace + rm -f './celerybeat.pid' celery -A {{cookiecutter.project_slug}}.taskapp beat -l INFO diff --git a/{{cookiecutter.project_slug}}/compose/django/celery/worker/start-dev.sh b/{{cookiecutter.project_slug}}/compose/local/django/celery/worker/start.sh similarity index 74% rename from {{cookiecutter.project_slug}}/compose/django/celery/worker/start-dev.sh rename to {{cookiecutter.project_slug}}/compose/local/django/celery/worker/start.sh index 594065e6c..8b50c8cfd 100644 --- a/{{cookiecutter.project_slug}}/compose/django/celery/worker/start-dev.sh +++ b/{{cookiecutter.project_slug}}/compose/local/django/celery/worker/start.sh @@ -1,7 +1,9 @@ -#!/bin/sh +#!/usr/bin/env bash set -o errexit +set -o pipefail set -o nounset set -o xtrace + celery -A {{cookiecutter.project_slug}}.taskapp worker -l INFO diff --git a/{{cookiecutter.project_slug}}/compose/local/django/start.sh b/{{cookiecutter.project_slug}}/compose/local/django/start.sh new file mode 100644 index 000000000..cf4a41667 --- /dev/null +++ b/{{cookiecutter.project_slug}}/compose/local/django/start.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +set -o errexit +set -o pipefail +set -o nounset +set -o xtrace + + +python manage.py migrate +python manage.py runserver_plus 0.0.0.0:8000 diff --git a/{{cookiecutter.project_slug}}/compose/postgres/Dockerfile b/{{cookiecutter.project_slug}}/compose/postgres/Dockerfile deleted file mode 100644 index 9cdaaba30..000000000 --- a/{{cookiecutter.project_slug}}/compose/postgres/Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -FROM postgres:{{ cookiecutter.postgresql_version }} - -# add backup scripts -ADD backup.sh /usr/local/bin/backup -ADD restore.sh /usr/local/bin/restore -ADD list-backups.sh /usr/local/bin/list-backups - -# make them executable -RUN chmod +x /usr/local/bin/restore -RUN chmod +x /usr/local/bin/list-backups -RUN chmod +x /usr/local/bin/backup diff --git a/{{cookiecutter.project_slug}}/compose/caddy/Caddyfile b/{{cookiecutter.project_slug}}/compose/production/caddy/Caddyfile similarity index 100% rename from {{cookiecutter.project_slug}}/compose/caddy/Caddyfile rename to {{cookiecutter.project_slug}}/compose/production/caddy/Caddyfile diff --git a/{{cookiecutter.project_slug}}/compose/production/caddy/Dockerfile b/{{cookiecutter.project_slug}}/compose/production/caddy/Dockerfile new file mode 100644 index 000000000..d02f0342d --- /dev/null +++ b/{{cookiecutter.project_slug}}/compose/production/caddy/Dockerfile @@ -0,0 +1,3 @@ +FROM abiosoft/caddy:0.10.6 + +COPY ./compose/production/caddy/Caddyfile /etc/Caddyfile diff --git a/{{cookiecutter.project_slug}}/compose/production/django/Dockerfile b/{{cookiecutter.project_slug}}/compose/production/django/Dockerfile new file mode 100644 index 000000000..fcbe51844 --- /dev/null +++ b/{{cookiecutter.project_slug}}/compose/production/django/Dockerfile @@ -0,0 +1,39 @@ +FROM python:3.5 + +ENV PYTHONUNBUFFERED 1 + +RUN groupadd -r django \ + && useradd -r -g django django + +# Requirements have to be pulled and installed here, otherwise caching won't work +COPY ./requirements /requirements +RUN pip install --no-cache-dir -r /requirements/production.txt \ + && rm -rf /requirements + +COPY ./compose/production/django/gunicorn.sh /gunicorn.sh +RUN sed -i 's/\r//' /gunicorn.sh +RUN chmod +x /gunicorn.sh +RUN chown django /gunicorn.sh + +COPY ./compose/production/django/entrypoint.sh /entrypoint.sh +RUN sed -i 's/\r//' /entrypoint.sh +RUN chmod +x /entrypoint.sh +RUN chown django /entrypoint.sh + +COPY ./compose/production/django/celery/worker/start.sh /start-celeryworker.sh +RUN sed -i 's/\r//' /start-celeryworker.sh +RUN chmod +x /start-celeryworker.sh + +COPY ./compose/production/django/celery/beat/start.sh /start-celerybeat.sh +RUN sed -i 's/\r//' /start-celerybeat.sh +RUN chmod +x /start-celerybeat.sh + +COPY . /app + +RUN chown -R django /app + +USER django + +WORKDIR /app + +ENTRYPOINT ["/entrypoint.sh"] diff --git a/{{cookiecutter.project_slug}}/compose/production/django/celery/beat/start.sh b/{{cookiecutter.project_slug}}/compose/production/django/celery/beat/start.sh new file mode 100644 index 000000000..845db0a3d --- /dev/null +++ b/{{cookiecutter.project_slug}}/compose/production/django/celery/beat/start.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +set -o errexit +set -o pipefail +set -o nounset + + +celery -A {{cookiecutter.project_slug}}.taskapp beat -l INFO diff --git a/{{cookiecutter.project_slug}}/compose/production/django/celery/worker/start.sh b/{{cookiecutter.project_slug}}/compose/production/django/celery/worker/start.sh new file mode 100644 index 000000000..4529aad92 --- /dev/null +++ b/{{cookiecutter.project_slug}}/compose/production/django/celery/worker/start.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +set -o errexit +set -o pipefail +set -o nounset + + +celery -A {{cookiecutter.project_slug}}.taskapp worker -l INFO diff --git a/{{cookiecutter.project_slug}}/compose/django/entrypoint.sh b/{{cookiecutter.project_slug}}/compose/production/django/entrypoint.sh similarity index 91% rename from {{cookiecutter.project_slug}}/compose/django/entrypoint.sh rename to {{cookiecutter.project_slug}}/compose/production/django/entrypoint.sh index 9fe7f5c88..3b83c7bb6 100644 --- a/{{cookiecutter.project_slug}}/compose/django/entrypoint.sh +++ b/{{cookiecutter.project_slug}}/compose/production/django/entrypoint.sh @@ -1,5 +1,12 @@ -#!/bin/bash -set -e +#!/usr/bin/env bash + +set -o errexit +set -o pipefail + +# todo: turn on after #1295 +# set -o nounset + + cmd="$@" # This entrypoint is used to play nicely with the current cookiecutter configuration. diff --git a/{{cookiecutter.project_slug}}/compose/django/gunicorn.sh b/{{cookiecutter.project_slug}}/compose/production/django/gunicorn.sh similarity index 59% rename from {{cookiecutter.project_slug}}/compose/django/gunicorn.sh rename to {{cookiecutter.project_slug}}/compose/production/django/gunicorn.sh index 014f173e3..25da06496 100644 --- a/{{cookiecutter.project_slug}}/compose/django/gunicorn.sh +++ b/{{cookiecutter.project_slug}}/compose/production/django/gunicorn.sh @@ -1,3 +1,9 @@ -#!/bin/sh +#!/usr/bin/env bash + +set -o errexit +set -o pipefail +set -o nounset + + python /app/manage.py collectstatic --noinput -/usr/local/bin/gunicorn config.wsgi -w 4 -b 0.0.0.0:5000 --chdir=/app \ No newline at end of file +/usr/local/bin/gunicorn config.wsgi -w 4 -b 0.0.0.0:5000 --chdir=/app diff --git a/{{cookiecutter.project_slug}}/compose/production/postgres/Dockerfile b/{{cookiecutter.project_slug}}/compose/production/postgres/Dockerfile new file mode 100644 index 000000000..84164d0b5 --- /dev/null +++ b/{{cookiecutter.project_slug}}/compose/production/postgres/Dockerfile @@ -0,0 +1,10 @@ +FROM postgres:{{ cookiecutter.postgresql_version }} + +COPY ./compose/production/postgres/backup.sh /usr/local/bin/backup +RUN chmod +x /usr/local/bin/backup + +COPY ./compose/production/postgres/restore.sh /usr/local/bin/restore +RUN chmod +x /usr/local/bin/restore + +COPY ./compose/production/postgres/list-backups.sh /usr/local/bin/list-backups +RUN chmod +x /usr/local/bin/list-backups diff --git a/{{cookiecutter.project_slug}}/compose/postgres/backup.sh b/{{cookiecutter.project_slug}}/compose/production/postgres/backup.sh similarity index 90% rename from {{cookiecutter.project_slug}}/compose/postgres/backup.sh rename to {{cookiecutter.project_slug}}/compose/production/postgres/backup.sh index 47f7a5140..46438011c 100644 --- a/{{cookiecutter.project_slug}}/compose/postgres/backup.sh +++ b/{{cookiecutter.project_slug}}/compose/production/postgres/backup.sh @@ -1,6 +1,9 @@ -#!/bin/bash -# stop on errors -set -e +#!/usr/bin/env bash + +set -o errexit +set -o pipefail +set -o nounset + # we might run into trouble when using the default `postgres` user, e.g. when dropping the postgres # database in restore.sh. Check that something else is used here diff --git a/{{cookiecutter.project_slug}}/compose/postgres/list-backups.sh b/{{cookiecutter.project_slug}}/compose/production/postgres/list-backups.sh similarity index 53% rename from {{cookiecutter.project_slug}}/compose/postgres/list-backups.sh rename to {{cookiecutter.project_slug}}/compose/production/postgres/list-backups.sh index 75972b75b..2be3d1d61 100644 --- a/{{cookiecutter.project_slug}}/compose/postgres/list-backups.sh +++ b/{{cookiecutter.project_slug}}/compose/production/postgres/list-backups.sh @@ -1,4 +1,10 @@ -#!/bin/bash +#!/usr/bin/env bash + +set -o errexit +set -o pipefail +set -o nounset + + echo "listing available backups" echo "-------------------------" ls /backups/ diff --git a/{{cookiecutter.project_slug}}/compose/postgres/restore.sh b/{{cookiecutter.project_slug}}/compose/production/postgres/restore.sh similarity index 96% rename from {{cookiecutter.project_slug}}/compose/postgres/restore.sh rename to {{cookiecutter.project_slug}}/compose/production/postgres/restore.sh index ddfc90d5f..e7358949e 100644 --- a/{{cookiecutter.project_slug}}/compose/postgres/restore.sh +++ b/{{cookiecutter.project_slug}}/compose/production/postgres/restore.sh @@ -1,7 +1,9 @@ -#!/bin/bash +#!/usr/bin/env bash + +set -o errexit +set -o pipefail +set -o nounset -# stop on errors -set -e # we might run into trouble when using the default `postgres` user, e.g. when dropping the postgres # database in restore.sh. Check that something else is used here diff --git a/{{cookiecutter.project_slug}}/local.yml b/{{cookiecutter.project_slug}}/local.yml index 2bc28ee5f..c54805a13 100644 --- a/{{cookiecutter.project_slug}}/local.yml +++ b/{{cookiecutter.project_slug}}/local.yml @@ -1,14 +1,14 @@ version: '2' volumes: - postgres_data_dev: {} - postgres_backup_dev: {} + postgres_data_local: {} + postgres_backup_local: {} services: - django: &django + django:{% if cookiecutter.use_celery == 'y' %} &django{% endif %} build: context: . - dockerfile: ./compose/django/Dockerfile-local + dockerfile: ./compose/local/django/Dockerfile depends_on: - postgres{% if cookiecutter.use_mailhog == 'y' %} - mailhog{% endif %} @@ -19,13 +19,15 @@ services: - ./.envs/.local/.postgres ports: - "8000:8000" - command: /start-dev.sh + command: /start.sh postgres: - build: ./compose/postgres + build: + context: . + dockerfile: ./compose/production/postgres/Dockerfile volumes: - - postgres_data_dev:/var/lib/postgresql/data - - postgres_backup_dev:/backups + - postgres_data_local:/var/lib/postgresql/data + - postgres_backup_local:/backups env_file: - ./.envs/.local/.postgres {% if cookiecutter.use_mailhog == 'y' %} @@ -46,7 +48,7 @@ services: - postgres{% if cookiecutter.use_mailhog == 'y' %} - mailhog{% endif %} ports: [] - command: /start-celeryworker-dev.sh + command: /start-celeryworker.sh celerybeat: # https://github.com/docker/compose/issues/3220 @@ -56,5 +58,5 @@ services: - postgres{% if cookiecutter.use_mailhog == 'y' %} - mailhog{% endif %} ports: [] - command: /start-celerybeat-dev.sh + command: /start-celerybeat.sh {% endif %} diff --git a/{{cookiecutter.project_slug}}/production.yml b/{{cookiecutter.project_slug}}/production.yml index 4735df54d..e242f99fb 100644 --- a/{{cookiecutter.project_slug}}/production.yml +++ b/{{cookiecutter.project_slug}}/production.yml @@ -6,10 +6,10 @@ volumes: caddy: {} services: - django: + django:{% if cookiecutter.use_celery == 'y' %} &django{% endif %} build: context: . - dockerfile: ./compose/django/Dockerfile + dockerfile: ./compose/production/django/Dockerfile depends_on: - postgres - redis @@ -19,7 +19,9 @@ services: command: /gunicorn.sh postgres: - build: ./compose/postgres + build: + context: . + dockerfile: ./compose/production/postgres/Dockerfile volumes: - postgres_data:/var/lib/postgresql/data - postgres_backup:/backups @@ -27,7 +29,9 @@ services: - ./.envs/.production/.postgres caddy: - build: ./compose/caddy + build: + context: . + dockerfile: ./compose/production/caddy/Dockerfile depends_on: - django volumes: @@ -42,26 +46,22 @@ services: image: redis:3.0 {% if cookiecutter.use_celery == 'y' %} celeryworker: - build: - context: . - dockerfile: ./compose/django/Dockerfile + <<: *django depends_on: - postgres - redis env_file: - ./.envs/.production/.django - ./.envs/.production/.postgres - command: celery -A {{cookiecutter.project_slug}}.taskapp worker -l INFO + command: /start-celeryworker.sh celerybeat: - build: - context: . - dockerfile: ./compose/django/Dockerfile + <<: *django depends_on: - postgres - redis env_file: - ./.envs/.production/.django - ./.envs/.production/.postgres - command: celery -A {{cookiecutter.project_slug}}.taskapp beat -l INFO + command: /start-celerybeat.sh {% endif %} diff --git a/{{cookiecutter.project_slug}}/requirements/base.txt b/{{cookiecutter.project_slug}}/requirements/base.txt index 0e15afab5..2d38694e5 100644 --- a/{{cookiecutter.project_slug}}/requirements/base.txt +++ b/{{cookiecutter.project_slug}}/requirements/base.txt @@ -2,11 +2,11 @@ # like Pillow and psycopg2 # See http://bitly.com/wheel-building-fails-CPython-35 # Verified bug on Python 3.5.1 -wheel==0.29.0 +wheel==0.30.0 # Bleeding edge Django -django==1.10.7 # pyup: >=1.10,<1.11 +django==1.10.8 # pyup: >=1.10,<1.11 # Configuration django-environ==0.4.4 diff --git a/{{cookiecutter.project_slug}}/requirements/local.txt b/{{cookiecutter.project_slug}}/requirements/local.txt index 4808d8862..6891918b0 100644 --- a/{{cookiecutter.project_slug}}/requirements/local.txt +++ b/{{cookiecutter.project_slug}}/requirements/local.txt @@ -5,7 +5,7 @@ coverage==4.4.1 django-coverage-plugin==1.5.0 Sphinx==1.6.3 -django-extensions==1.9.0 +django-extensions==1.9.1 Werkzeug==0.12.2 django-test-plus==1.0.18 factory-boy==2.9.2 diff --git a/{{cookiecutter.project_slug}}/requirements/production.txt b/{{cookiecutter.project_slug}}/requirements/production.txt index b9f09ca75..a347337f8 100644 --- a/{{cookiecutter.project_slug}}/requirements/production.txt +++ b/{{cookiecutter.project_slug}}/requirements/production.txt @@ -4,8 +4,8 @@ {% if cookiecutter.windows == 'y' -%} # Python-PostgreSQL Database Adapter -# If using Win for dev, this assumes Unix in prod -# ------------------------------------------------ +# Assuming Windows is used locally, and *nix -- in production. +# ------------------------------------------------------------ psycopg2==2.7.3.1 {%- endif %} diff --git a/{{cookiecutter.project_slug}}/requirements/test.txt b/{{cookiecutter.project_slug}}/requirements/test.txt index c12222eb1..8d21ed8b7 100644 --- a/{{cookiecutter.project_slug}}/requirements/test.txt +++ b/{{cookiecutter.project_slug}}/requirements/test.txt @@ -11,6 +11,7 @@ coverage==4.4.1 flake8==3.4.1 # pyup: != 2.6.0 django-test-plus==1.0.18 factory-boy==2.9.2 +django-coverage-plugin==1.5.0 # pytest pytest-django==3.1.2 diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/base.html b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/base.html index 960cd8604..f19ff5889 100644 --- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/base.html +++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/base.html @@ -15,7 +15,7 @@ {% block css %} - + {% endraw %}{% if cookiecutter.use_compressor == "y" %}{% raw %}{% compress css %}{% endraw %}{% endif %}{% raw %} @@ -29,7 +29,7 @@
-