diff --git a/.github/contributors.json b/.github/contributors.json
index 5b5c575cf..846375687 100644
--- a/.github/contributors.json
+++ b/.github/contributors.json
@@ -1077,5 +1077,10 @@
"name": "lcd1232",
"github_login": "lcd1232",
"twitter_username": ""
+ },
+ {
+ "name": "Tames McTigue",
+ "github_login": "Tamerz",
+ "twitter_username": ""
}
]
\ No newline at end of file
diff --git a/.github/workflows/update-changelog.yml b/.github/workflows/update-changelog.yml
index 7cb2a1b80..fa70824c0 100644
--- a/.github/workflows/update-changelog.yml
+++ b/.github/workflows/update-changelog.yml
@@ -28,7 +28,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Commit changes
- uses: stefanzweifel/git-auto-commit-action@v4.9.0
+ uses: stefanzweifel/git-auto-commit-action@v4.9.2
with:
commit_message: Update Changelog
file_pattern: CHANGELOG.md
diff --git a/.github/workflows/update-contributors.yml b/.github/workflows/update-contributors.yml
index 4d9026b9f..5d5dd0eaa 100644
--- a/.github/workflows/update-contributors.yml
+++ b/.github/workflows/update-contributors.yml
@@ -24,7 +24,7 @@ jobs:
run: python scripts/update_contributors.py
- name: Commit changes
- uses: stefanzweifel/git-auto-commit-action@v4.9.0
+ uses: stefanzweifel/git-auto-commit-action@v4.9.2
with:
commit_message: Update Contributors
file_pattern: CONTRIBUTORS.md .github/contributors.json
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5838e06eb..d1479a28e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,54 @@ All enhancements and patches to Cookiecutter Django will be documented in this f
+## [2021-03-26]
+### Updated
+- Update djangorestframework to 3.12.4 ([#3107](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3107))
+
+## [2021-03-25]
+### Updated
+- Update djangorestframework to 3.12.3 ([#3105](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3105))
+
+## [2021-03-22]
+### Updated
+- Update django-crispy-forms to 1.11.2 ([#3104](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3104))
+- Update sphinx to 3.5.3 ([#3103](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3103))
+- Update ipdb to 0.13.7 ([#3102](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3102))
+- Update sphinx-autobuild to 2021.3.14 ([#3101](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3101))
+- Update isort to 5.8.0 ([#3100](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3100))
+- Update pre-commit to 2.11.1 ([#3089](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3089))
+- Update flake8 to 3.9.0 ([#3096](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3096))
+- Update pillow to 8.1.2 ([#3084](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3084))
+- Auto-update pre-commit hooks ([#3095](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3095))
+
+## [2021-03-05]
+### Changed
+- Updated test_urls.py and views.py to re-use User.get_absolute_url() ([#3070](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3070))
+### Updated
+- Bump stefanzweifel/git-auto-commit-action from v4.9.1 to v4.9.2 ([#3082](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3082))
+
+## [2021-03-03]
+### Updated
+- Update tox to 3.23.0 ([#3079](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3079))
+- Update ipdb to 0.13.5 ([#3078](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3078))
+
+## [2021-03-02]
+### Fixed
+- Fixes for pytest job in Github CI workflow ([#3076](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3076))
+### Updated
+- Update pillow to 8.1.1 ([#3075](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3075))
+- Update coverage to 5.5 ([#3074](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3074))
+
+## [2021-02-24]
+### Updated
+- Bump stefanzweifel/git-auto-commit-action from v4.9.0 to v4.9.1 ([#3069](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3069))
+
+## [2021-02-23]
+### Changed
+- Update to Django 3.1 ([#3043](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3043))
+- Lint with pre-commit on CI with Github actions ([#3066](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3066))
+- Use exception var in status code pages if available ([#2992](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/2992))
+
## [2021-02-22]
### Changed
- refactor: remove default cache settings in test.py ([#3064](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3064))
diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index 9a8e30190..ea8701879 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -1363,6 +1363,13 @@ Listed in alphabetical order.
Tano Abeleyra
diff --git a/requirements.txt b/requirements.txt
index cce198bf4..b4ae9467a 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -5,13 +5,14 @@ binaryornot==0.4.4
# Code quality
# ------------------------------------------------------------------------------
black==20.8b1
-isort==5.7.0
-flake8==3.8.4
+isort==5.8.0
+flake8==3.9.0
flake8-isort==4.0.0
+pre-commit==2.10.1
# Testing
# ------------------------------------------------------------------------------
-tox==3.22.0
+tox==3.23.0
pytest==5.4.3 # pyup: <6 # https://github.com/hackebrot/pytest-cookies/issues/51
pytest-cookies==0.5.1
pytest-instafail==0.4.2
diff --git a/setup.py b/setup.py
index bc31d84a1..f8cfe29cd 100644
--- a/setup.py
+++ b/setup.py
@@ -10,7 +10,7 @@ except ImportError:
# Our version ALWAYS matches the version of Django we support
# If Django has a new release, we branch, tag, then update this setting after the tag.
-version = "3.1.7"
+version = "3.1.8"
if sys.argv[-1] == "tag":
os.system(f'git tag -a {version} -m "version {version}"')
diff --git a/tests/test_bare.sh b/tests/test_bare.sh
index eae09dc78..1f52d91b6 100755
--- a/tests/test_bare.sh
+++ b/tests/test_bare.sh
@@ -27,5 +27,11 @@ sudo utility/install_os_dependencies.sh install
# Install Python deps
pip install -r requirements/local.txt
+# Lint by running pre-commit on all files
+# Needs a git repo to find the project root
+git init
+git add .
+pre-commit run --show-diff-on-failure -a
+
# run the project's tests
pytest
diff --git a/tests/test_cookiecutter_generation.py b/tests/test_cookiecutter_generation.py
index c8514493f..7e585ea40 100755
--- a/tests/test_cookiecutter_generation.py
+++ b/tests/test_cookiecutter_generation.py
@@ -231,7 +231,7 @@ def test_gitlab_invokes_flake8_and_pytest(
["use_docker", "expected_test_script"],
[
("n", "pytest"),
- ("y", "docker-compose -f local.yml exec -T django pytest"),
+ ("y", "docker-compose -f local.yml run django pytest"),
],
)
def test_github_invokes_linter_and_pytest(
diff --git a/tests/test_docker.sh b/tests/test_docker.sh
index f6df6b8ab..001ef06d0 100755
--- a/tests/test_docker.sh
+++ b/tests/test_docker.sh
@@ -17,12 +17,16 @@ cd .cache/docker
cookiecutter ../../ --no-input --overwrite-if-exists use_docker=y $@
cd my_awesome_project
+# Lint by running pre-commit on all files
+# Needs a git repo to find the project root
+# We don't have git inside Docker, so run it outside
+git init
+git add .
+pre-commit run --show-diff-on-failure -a
+
# run the project's type checks
docker-compose -f local.yml run django mypy my_awesome_project
-# Run black with --check option
-docker-compose -f local.yml run django black --check --diff --exclude 'migrations' ./
-
# run the project's tests
docker-compose -f local.yml run django pytest
diff --git a/{{cookiecutter.project_slug}}/.envs/.local/.django b/{{cookiecutter.project_slug}}/.envs/.local/.django
index 919f31185..ef581a1c0 100644
--- a/{{cookiecutter.project_slug}}/.envs/.local/.django
+++ b/{{cookiecutter.project_slug}}/.envs/.local/.django
@@ -14,4 +14,4 @@ REDIS_URL=redis://redis:6379/0
# Flower
CELERY_FLOWER_USER=!!!SET CELERY_FLOWER_USER!!!
CELERY_FLOWER_PASSWORD=!!!SET CELERY_FLOWER_PASSWORD!!!
-{% endif %}
+{%- endif %}
diff --git a/{{cookiecutter.project_slug}}/.github/workflows/ci.yml b/{{cookiecutter.project_slug}}/.github/workflows/ci.yml
index 378ee30b3..9798e6c8d 100644
--- a/{{cookiecutter.project_slug}}/.github/workflows/ci.yml
+++ b/{{cookiecutter.project_slug}}/.github/workflows/ci.yml
@@ -7,11 +7,11 @@ env:
on:
pull_request:
- branches: [ "master" ]
+ branches: [ "master", "main" ]
paths-ignore: [ "docs/**" ]
push:
- branches: [ "master" ]
+ branches: [ "master", "main" ]
paths-ignore: [ "docs/**" ]
@@ -34,30 +34,50 @@ jobs:
- name: Install and Run Pre-commit
uses: pre-commit/action@v2.0.0
-# With no caching at all the entire ci process takes 4m 30s to complete!
+ # With no caching at all the entire ci process takes 4m 30s to complete!
pytest:
runs-on: ubuntu-latest
+ {%- if cookiecutter.use_docker == 'n' %}
+
+ services:
+ {%- if cookiecutter.use_celery == 'y' %}
+ redis:
+ image: redis:5.0
+ ports:
+ - 6379:6379
+ {%- endif %}
+ postgres:
+ image: postgres:12
+ ports:
+ - 5432:5432
+ env:
+ POSTGRES_PASSWORD: postgres
+
+ env:
+ {%- if cookiecutter.use_celery == 'y' %}
+ CELERY_BROKER_URL: "redis://localhost:6379/0"
+ {%- endif %}
+ # postgres://user:password@host:port/database
+ DATABASE_URL: "postgres://postgres:postgres@localhost:5432/postgres"
+ {%- endif %}
+
steps:
- name: Checkout Code Repository
uses: actions/checkout@v2
- {% if cookiecutter.use_docker == 'y' -%}
+ {%- if cookiecutter.use_docker == 'y' %}
- name: Build the Stack
run: docker-compose -f local.yml build
- - name: Make DB Migrations
+ - name: Run DB Migrations
run: docker-compose -f local.yml run --rm django python manage.py migrate
- - name: Run the Stack
- run: docker-compose -f local.yml up -d
-
- name: Run Django Tests
- run: docker-compose -f local.yml exec -T django pytest
+ run: docker-compose -f local.yml run django pytest
- name: Tear down the Stack
run: docker-compose -f local.yml down
-
{%- else %}
- name: Set up Python 3.8
@@ -69,8 +89,8 @@ jobs:
id: pip-cache-location
run: |
echo "::set-output name=dir::$(pip cache dir)"
+ {%- raw %}
- {% raw %}
- name: Cache pip Project Dependencies
uses: actions/cache@v2
with:
@@ -80,7 +100,7 @@ jobs:
key: ${{ runner.os }}-pip-${{ hashFiles('**/local.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- {% endraw %}
+ {%- endraw %}
- name: Install Dependencies
run: |
@@ -89,5 +109,4 @@ jobs:
- name: Test with pytest
run: pytest
-
{%- endif %}
diff --git a/{{cookiecutter.project_slug}}/.gitlab-ci.yml b/{{cookiecutter.project_slug}}/.gitlab-ci.yml
index 60925b811..c599f6b62 100644
--- a/{{cookiecutter.project_slug}}/.gitlab-ci.yml
+++ b/{{cookiecutter.project_slug}}/.gitlab-ci.yml
@@ -21,7 +21,6 @@ flake8:
pytest:
stage: test
- image: python:3.8
{% if cookiecutter.use_docker == 'y' -%}
image: docker/compose:latest
tags:
@@ -35,7 +34,8 @@ pytest:
- docker-compose -f local.yml up -d
script:
- docker-compose -f local.yml run django pytest
- {%- else %}
+ {%- else -%}
+ image: python:3.8
tags:
- python
services:
diff --git a/{{cookiecutter.project_slug}}/.pre-commit-config.yaml b/{{cookiecutter.project_slug}}/.pre-commit-config.yaml
index 5a5b58a63..df71ea618 100644
--- a/{{cookiecutter.project_slug}}/.pre-commit-config.yaml
+++ b/{{cookiecutter.project_slug}}/.pre-commit-config.yaml
@@ -16,14 +16,13 @@ repos:
- id: black
- repo: https://github.com/timothycrosley/isort
- rev: 5.7.0
+ rev: 5.8.0
hooks:
- id: isort
- repo: https://gitlab.com/pycqa/flake8
- rev: 3.8.4
+ rev: 3.9.0
hooks:
- id: flake8
args: ['--config=setup.cfg']
additional_dependencies: [flake8-isort]
-
diff --git a/{{cookiecutter.project_slug}}/.pylintrc b/{{cookiecutter.project_slug}}/.pylintrc
index a0955f076..dff52e75b 100644
--- a/{{cookiecutter.project_slug}}/.pylintrc
+++ b/{{cookiecutter.project_slug}}/.pylintrc
@@ -1,5 +1,5 @@
[MASTER]
-load-plugins=pylint_django{% if cookiecutter.use_celery == "y" %}, pylint_celery {% endif %}
+load-plugins=pylint_django{% if cookiecutter.use_celery == "y" %}, pylint_celery{% endif %}
[FORMAT]
max-line-length=120
diff --git a/{{cookiecutter.project_slug}}/LICENSE b/{{cookiecutter.project_slug}}/LICENSE
index c831e0309..812fa0fa6 100644
--- a/{{cookiecutter.project_slug}}/LICENSE
+++ b/{{cookiecutter.project_slug}}/LICENSE
@@ -7,7 +7,7 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-{% elif cookiecutter.open_source_license == 'BSD' %}
+{%- elif cookiecutter.open_source_license == 'BSD' %}
Copyright (c) {% now 'utc', '%Y' %}, {{ cookiecutter.author_name }}
All rights reserved.
@@ -35,7 +35,7 @@ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
OF THE POSSIBILITY OF SUCH DAMAGE.
-{% elif cookiecutter.open_source_license == 'GPLv3' %}
+{%- elif cookiecutter.open_source_license == 'GPLv3' %}
Copyright (c) {% now 'utc', '%Y' %}, {{ cookiecutter.author_name }}
This program is free software: you can redistribute it and/or modify
@@ -50,7 +50,7 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
-{% elif cookiecutter.open_source_license == 'Apache Software License 2.0' %}
+{%- elif cookiecutter.open_source_license == 'Apache Software License 2.0' %}
Apache License
Version 2.0, January 2004
@@ -242,4 +242,4 @@ along with this program. If not, see .
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-{% endif %}
+{%- endif %}
diff --git a/{{cookiecutter.project_slug}}/Procfile b/{{cookiecutter.project_slug}}/Procfile
index 0becb2cbe..8679a0669 100644
--- a/{{cookiecutter.project_slug}}/Procfile
+++ b/{{cookiecutter.project_slug}}/Procfile
@@ -1,10 +1,10 @@
release: python manage.py migrate
-{% if cookiecutter.use_async == "y" -%}
+{%- if cookiecutter.use_async == "y" -%}
web: gunicorn config.asgi:application -k uvicorn.workers.UvicornWorker
{%- else %}
web: gunicorn config.wsgi:application
{%- endif %}
-{% if cookiecutter.use_celery == "y" -%}
+{%- if cookiecutter.use_celery == "y" -%}
worker: celery worker --app=config.celery_app --loglevel=info
beat: celery beat --app=config.celery_app --loglevel=info
{%- endif %}
diff --git a/{{cookiecutter.project_slug}}/README.rst b/{{cookiecutter.project_slug}}/README.rst
index 2aae422ce..b120f16a6 100644
--- a/{{cookiecutter.project_slug}}/README.rst
+++ b/{{cookiecutter.project_slug}}/README.rst
@@ -9,10 +9,10 @@
.. image:: https://img.shields.io/badge/code%20style-black-000000.svg
:target: https://github.com/ambv/black
:alt: Black code style
-{% if cookiecutter.open_source_license != "Not open source" %}
+{%- if cookiecutter.open_source_license != "Not open source" %}
:License: {{cookiecutter.open_source_license}}
-{% endif %}
+{%- endif %}
Settings
--------
@@ -67,7 +67,7 @@ Moved to `Live reloading and SASS compilation`_.
.. _`Live reloading and SASS compilation`: http://cookiecutter-django.readthedocs.io/en/latest/live-reloading-and-sass-compilation.html
-{% if cookiecutter.use_celery == "y" %}
+{%- if cookiecutter.use_celery == "y" %}
Celery
^^^^^^
@@ -83,19 +83,21 @@ To run a celery worker:
Please note: For Celery's import magic to work, it is important *where* the celery commands are run. If you are in the same folder with *manage.py*, you should be right.
-{% endif %}
-{% if cookiecutter.use_mailhog == "y" %}
+{%- endif %}
+{%- if cookiecutter.use_mailhog == "y" %}
Email Server
^^^^^^^^^^^^
-{% if cookiecutter.use_docker == 'y' %}
+{%- if cookiecutter.use_docker == 'y' %}
+
In development, it is often nice to be able to see emails that are being sent from your application. For that reason local SMTP server `MailHog`_ with a web interface is available as docker container.
Container mailhog will start automatically when you will run all docker containers.
Please check `cookiecutter-django Docker documentation`_ for more details how to start all containers.
With MailHog running, to view messages that are sent by your application, open your browser and go to ``http://127.0.0.1:8025``
-{% else %}
+{%- else %}
+
In development, it is often nice to be able to see emails that are being sent from your application. If you choose to use `MailHog`_ when generating the project a local SMTP server with a web interface will be available.
#. `Download the latest MailHog release`_ for your OS.
@@ -117,10 +119,10 @@ In development, it is often nice to be able to see emails that are being sent fr
Now you have your own mail server running locally, ready to receive whatever you send it.
.. _`Download the latest MailHog release`: https://github.com/mailhog/MailHog/releases
-{% endif %}
+{%- endif %}
.. _mailhog: https://github.com/mailhog/MailHog
-{% endif %}
-{% if cookiecutter.use_sentry == "y" %}
+{%- endif %}
+{%- if cookiecutter.use_sentry == "y" %}
Sentry
^^^^^^
@@ -129,13 +131,13 @@ Sentry is an error logging aggregator service. You can sign up for a free accoun
The system is setup with reasonable defaults, including 404 logging and integration with the WSGI application.
You must set the DSN url in production.
-{% endif %}
+{%- endif %}
Deployment
----------
The following details how to deploy this application.
-{% if cookiecutter.use_heroku.lower() == "y" %}
+{%- if cookiecutter.use_heroku.lower() == "y" %}
Heroku
^^^^^^
@@ -143,8 +145,8 @@ Heroku
See detailed `cookiecutter-django Heroku documentation`_.
.. _`cookiecutter-django Heroku documentation`: http://cookiecutter-django.readthedocs.io/en/latest/deployment-on-heroku.html
-{% endif %}
-{% if cookiecutter.use_docker.lower() == "y" %}
+{%- endif %}
+{%- if cookiecutter.use_docker.lower() == "y" %}
Docker
^^^^^^
@@ -152,9 +154,8 @@ Docker
See detailed `cookiecutter-django Docker documentation`_.
.. _`cookiecutter-django Docker documentation`: http://cookiecutter-django.readthedocs.io/en/latest/deployment-with-docker.html
-{% endif %}
-
-{% if cookiecutter.custom_bootstrap_compilation == "y" %}
+{%- endif %}
+{%- if cookiecutter.custom_bootstrap_compilation == "y" %}
Custom Bootstrap Compilation
^^^^^^
@@ -163,11 +164,11 @@ Bootstrap v4 is installed using npm and customised by tweaking your variables in
You can find a list of available variables `in the bootstrap source`_, or get explanations on them in the `Bootstrap docs`_.
-{% if cookiecutter.js_task_runner == 'Gulp' %}
+{%- if cookiecutter.js_task_runner == 'Gulp' %}
Bootstrap's javascript as well as its dependencies is concatenated into a single file: ``static/js/vendors.js``.
-{% endif %}
+{%- endif %}
.. _in the bootstrap source: https://github.com/twbs/bootstrap/blob/v4-dev/scss/_variables.scss
.. _Bootstrap docs: https://getbootstrap.com/docs/4.1/getting-started/theming/
-{% endif %}
+{%- endif %}
diff --git a/{{cookiecutter.project_slug}}/compose/local/django/start b/{{cookiecutter.project_slug}}/compose/local/django/start
index 660eda34c..9cbb6c897 100644
--- a/{{cookiecutter.project_slug}}/compose/local/django/start
+++ b/{{cookiecutter.project_slug}}/compose/local/django/start
@@ -10,4 +10,4 @@ python manage.py migrate
uvicorn config.asgi:application --host 0.0.0.0 --reload
{%- else %}
python manage.py runserver_plus 0.0.0.0:8000
-{% endif %}
+{%- endif %}
diff --git a/{{cookiecutter.project_slug}}/compose/production/aws/maintenance/download b/{{cookiecutter.project_slug}}/compose/production/aws/maintenance/download
index 8d5ea091f..0c515935f 100644
--- a/{{cookiecutter.project_slug}}/compose/production/aws/maintenance/download
+++ b/{{cookiecutter.project_slug}}/compose/production/aws/maintenance/download
@@ -21,4 +21,3 @@ export AWS_STORAGE_BUCKET_NAME="${DJANGO_AWS_STORAGE_BUCKET_NAME}"
aws s3 cp s3://${AWS_STORAGE_BUCKET_NAME}${BACKUP_DIR_PATH}/${1} ${BACKUP_DIR_PATH}/${1}
message_success "Finished downloading ${1}."
-
diff --git a/{{cookiecutter.project_slug}}/compose/production/aws/maintenance/upload b/{{cookiecutter.project_slug}}/compose/production/aws/maintenance/upload
index 4a89dcb5a..9446b9304 100644
--- a/{{cookiecutter.project_slug}}/compose/production/aws/maintenance/upload
+++ b/{{cookiecutter.project_slug}}/compose/production/aws/maintenance/upload
@@ -27,4 +27,3 @@ message_info "Cleaning the directory ${BACKUP_DIR_PATH}"
rm -rf ${BACKUP_DIR_PATH}/*
message_success "Finished uploading and cleaning."
-
diff --git a/{{cookiecutter.project_slug}}/compose/production/traefik/traefik.yml b/{{cookiecutter.project_slug}}/compose/production/traefik/traefik.yml
index 7b56063f3..cc183cd6c 100644
--- a/{{cookiecutter.project_slug}}/compose/production/traefik/traefik.yml
+++ b/{{cookiecutter.project_slug}}/compose/production/traefik/traefik.yml
@@ -35,7 +35,7 @@ http:
web-secure-router:
{%- if cookiecutter.domain_name.count('.') == 1 %}
rule: "Host(`{{ cookiecutter.domain_name }}`) || Host(`www.{{ cookiecutter.domain_name }}`)"
- {% else %}
+ {%- else %}
rule: "Host(`{{ cookiecutter.domain_name }}`)"
{%- endif %}
entryPoints:
diff --git a/{{cookiecutter.project_slug}}/config/settings/base.py b/{{cookiecutter.project_slug}}/config/settings/base.py
index f69908c2d..640d8b62c 100644
--- a/{{cookiecutter.project_slug}}/config/settings/base.py
+++ b/{{cookiecutter.project_slug}}/config/settings/base.py
@@ -44,7 +44,7 @@ LOCALE_PATHS = [str(ROOT_DIR / "locale")]
DATABASES = {"default": env.db("DATABASE_URL")}
{%- else %}
DATABASES = {
- "default": env.db("DATABASE_URL", default="postgres://{% if cookiecutter.windows == 'y' %}localhost{% endif %}/{{cookiecutter.project_slug}}")
+ "default": env.db("DATABASE_URL", default="postgres://{% if cookiecutter.windows == 'y' %}localhost{% endif %}/{{cookiecutter.project_slug}}"),
}
{%- endif %}
DATABASES["default"]["ATOMIC_REQUESTS"] = True
@@ -230,7 +230,8 @@ X_FRAME_OPTIONS = "DENY"
# ------------------------------------------------------------------------------
# https://docs.djangoproject.com/en/dev/ref/settings/#email-backend
EMAIL_BACKEND = env(
- "DJANGO_EMAIL_BACKEND", default="django.core.mail.backends.smtp.EmailBackend"
+ "DJANGO_EMAIL_BACKEND",
+ default="django.core.mail.backends.smtp.EmailBackend",
)
# https://docs.djangoproject.com/en/dev/ref/settings/#email-timeout
EMAIL_TIMEOUT = 5
diff --git a/{{cookiecutter.project_slug}}/config/settings/production.py b/{{cookiecutter.project_slug}}/config/settings/production.py
index bd0acfbd4..59928f829 100644
--- a/{{cookiecutter.project_slug}}/config/settings/production.py
+++ b/{{cookiecutter.project_slug}}/config/settings/production.py
@@ -146,7 +146,8 @@ DEFAULT_FROM_EMAIL = env(
SERVER_EMAIL = env("DJANGO_SERVER_EMAIL", default=DEFAULT_FROM_EMAIL)
# https://docs.djangoproject.com/en/dev/ref/settings/#email-subject-prefix
EMAIL_SUBJECT_PREFIX = env(
- "DJANGO_EMAIL_SUBJECT_PREFIX", default="[{{cookiecutter.project_name}}]"
+ "DJANGO_EMAIL_SUBJECT_PREFIX",
+ default="[{{cookiecutter.project_name}}]",
)
# ADMIN
diff --git a/{{cookiecutter.project_slug}}/gulpfile.js b/{{cookiecutter.project_slug}}/gulpfile.js
index 206f8a019..56a08e8fc 100644
--- a/{{cookiecutter.project_slug}}/gulpfile.js
+++ b/{{cookiecutter.project_slug}}/gulpfile.js
@@ -29,14 +29,14 @@ function pathsConfig(appName) {
const vendorsRoot = 'node_modules'
return {
- {% if cookiecutter.custom_bootstrap_compilation == 'y' %}
+ {%- if cookiecutter.custom_bootstrap_compilation == 'y' %}
bootstrapSass: `${vendorsRoot}/bootstrap/scss`,
vendorsJs: [
`${vendorsRoot}/jquery/dist/jquery.slim.js`,
`${vendorsRoot}/popper.js/dist/umd/popper.js`,
`${vendorsRoot}/bootstrap/dist/js/bootstrap.js`,
],
- {% endif %}
+ {%- endif %}
app: this.app,
templates: `${this.app}/templates`,
css: `${this.app}/static/css`,
@@ -67,9 +67,9 @@ function styles() {
return src(`${paths.sass}/project.scss`)
.pipe(sass({
includePaths: [
- {% if cookiecutter.custom_bootstrap_compilation == 'y' %}
+ {%- if cookiecutter.custom_bootstrap_compilation == 'y' %}
paths.bootstrapSass,
- {% endif %}
+ {%- endif %}
paths.sass
]
}).on('error', sass.logError))
@@ -90,7 +90,7 @@ function scripts() {
.pipe(dest(paths.js))
}
-{% if cookiecutter.custom_bootstrap_compilation == 'y' %}
+{%- if cookiecutter.custom_bootstrap_compilation == 'y' %}
// Vendor Javascript minification
function vendorScripts() {
return src(paths.vendorsJs)
@@ -101,7 +101,7 @@ function vendorScripts() {
.pipe(rename({ suffix: '.min' }))
.pipe(dest(paths.js))
}
-{% endif %}
+{%- endif %}
// Image compression
function imgCompression() {
@@ -110,7 +110,7 @@ function imgCompression() {
.pipe(dest(paths.images))
}
-{% if cookiecutter.use_async == 'y' -%}
+{%- if cookiecutter.use_async == 'y' -%}
// Run django server
function asyncRunServer() {
var cmd = spawn('gunicorn', [
@@ -143,7 +143,7 @@ function initBrowserSync() {
// https://www.browsersync.io/docs/options/#option-proxy
{%- if cookiecutter.use_docker == 'n' %}
proxy: 'localhost:8000'
- {% else %}
+ {%- else %}
proxy: {
target: 'django:8000',
proxyReq: [
@@ -172,7 +172,7 @@ function watchPaths() {
const generateAssets = parallel(
styles,
scripts,
- {% if cookiecutter.custom_bootstrap_compilation == 'y' %}vendorScripts,{% endif %}
+ {%- if cookiecutter.custom_bootstrap_compilation == 'y' %}vendorScripts,{% endif %}
imgCompression
)
diff --git a/{{cookiecutter.project_slug}}/local.yml b/{{cookiecutter.project_slug}}/local.yml
index e285f3498..6241ceede 100644
--- a/{{cookiecutter.project_slug}}/local.yml
+++ b/{{cookiecutter.project_slug}}/local.yml
@@ -52,7 +52,6 @@ services:
ports:
- "7000:7000"
command: /start-docs
-
{%- if cookiecutter.use_mailhog == 'y' %}
mailhog:
@@ -75,7 +74,7 @@ services:
depends_on:
- redis
- postgres
- {% if cookiecutter.use_mailhog == 'y' -%}
+ {%- if cookiecutter.use_mailhog == 'y' %}
- mailhog
{%- endif %}
ports: []
@@ -88,7 +87,7 @@ services:
depends_on:
- redis
- postgres
- {% if cookiecutter.use_mailhog == 'y' -%}
+ {%- if cookiecutter.use_mailhog == 'y' %}
- mailhog
{%- endif %}
ports: []
diff --git a/{{cookiecutter.project_slug}}/production.yml b/{{cookiecutter.project_slug}}/production.yml
index 93b61b134..3cccdb653 100644
--- a/{{cookiecutter.project_slug}}/production.yml
+++ b/{{cookiecutter.project_slug}}/production.yml
@@ -64,10 +64,9 @@ services:
<<: *django
image: {{ cookiecutter.project_slug }}_production_flower
command: /start-flower
-
{%- endif %}
+ {%- if cookiecutter.cloud_provider == 'AWS' %}
- {% if cookiecutter.cloud_provider == 'AWS' %}
awscli:
build:
context: .
diff --git a/{{cookiecutter.project_slug}}/requirements/base.txt b/{{cookiecutter.project_slug}}/requirements/base.txt
index 71317e818..a4ab01b00 100644
--- a/{{cookiecutter.project_slug}}/requirements/base.txt
+++ b/{{cookiecutter.project_slug}}/requirements/base.txt
@@ -1,6 +1,6 @@
pytz==2021.1 # https://github.com/stub42/pytz
python-slugify==4.0.1 # https://github.com/un33k/python-slugify
-Pillow==8.1.0 # https://github.com/python-pillow/Pillow
+Pillow==8.2.0 # https://github.com/python-pillow/Pillow
{%- if cookiecutter.use_compressor == "y" %}
{%- if cookiecutter.windows == 'y' and cookiecutter.use_docker == 'n' %}
rcssmin==1.0.6 --install-option="--without-c-extensions" # https://github.com/ndparker/rcssmin
@@ -29,17 +29,17 @@ uvicorn[standard]==0.13.4 # https://github.com/encode/uvicorn
# Django
# ------------------------------------------------------------------------------
-django==3.1.7 # pyup: < 3.2 # https://www.djangoproject.com/
+django==3.1.8 # pyup: < 3.2 # https://www.djangoproject.com/
django-environ==0.4.5 # https://github.com/joke2k/django-environ
django-model-utils==4.1.1 # https://github.com/jazzband/django-model-utils
django-allauth==0.44.0 # https://github.com/pennersr/django-allauth
-django-crispy-forms==1.11.1 # https://github.com/django-crispy-forms/django-crispy-forms
+django-crispy-forms==1.11.2 # https://github.com/django-crispy-forms/django-crispy-forms
{%- if cookiecutter.use_compressor == "y" %}
django-compressor==2.4 # https://github.com/django-compressor/django-compressor
{%- endif %}
django-redis==4.12.1 # https://github.com/jazzband/django-redis
{%- if cookiecutter.use_drf == "y" %}
# Django REST Framework
-djangorestframework==3.12.2 # https://github.com/encode/django-rest-framework
+djangorestframework==3.12.4 # https://github.com/encode/django-rest-framework
django-cors-headers==3.7.0 # https://github.com/adamchainz/django-cors-headers
{%- endif %}
diff --git a/{{cookiecutter.project_slug}}/requirements/local.txt b/{{cookiecutter.project_slug}}/requirements/local.txt
index 6960b1d79..801c2d2d5 100644
--- a/{{cookiecutter.project_slug}}/requirements/local.txt
+++ b/{{cookiecutter.project_slug}}/requirements/local.txt
@@ -1,7 +1,7 @@
-r base.txt
Werkzeug==1.0.1 # https://github.com/pallets/werkzeug
-ipdb==0.13.4 # https://github.com/gotcha/ipdb
+ipdb==0.13.7 # https://github.com/gotcha/ipdb
{%- if cookiecutter.use_docker == 'y' %}
psycopg2==2.8.6 # https://github.com/psycopg/psycopg2
{%- else %}
@@ -15,31 +15,31 @@ watchgod==0.6 # https://github.com/samuelcolvin/watchgod
# ------------------------------------------------------------------------------
mypy==0.812 # https://github.com/python/mypy
django-stubs==1.7.0 # https://github.com/typeddjango/django-stubs
-pytest==6.2.2 # https://github.com/pytest-dev/pytest
+pytest==6.2.3 # https://github.com/pytest-dev/pytest
pytest-sugar==0.9.4 # https://github.com/Frozenball/pytest-sugar
# Documentation
# ------------------------------------------------------------------------------
-sphinx==3.5.1 # https://github.com/sphinx-doc/sphinx
-sphinx-autobuild==2020.9.1 # https://github.com/GaretJax/sphinx-autobuild
+sphinx==3.5.3 # https://github.com/sphinx-doc/sphinx
+sphinx-autobuild==2021.3.14 # https://github.com/GaretJax/sphinx-autobuild
# Code quality
# ------------------------------------------------------------------------------
-flake8==3.8.4 # https://github.com/PyCQA/flake8
+flake8==3.9.0 # https://github.com/PyCQA/flake8
flake8-isort==4.0.0 # https://github.com/gforcada/flake8-isort
-coverage==5.4 # https://github.com/nedbat/coveragepy
+coverage==5.5 # https://github.com/nedbat/coveragepy
black==20.8b1 # https://github.com/ambv/black
pylint-django==2.4.2 # https://github.com/PyCQA/pylint-django
{%- if cookiecutter.use_celery == 'y' %}
pylint-celery==0.3 # https://github.com/PyCQA/pylint-celery
{%- endif %}
-pre-commit==2.10.1 # https://github.com/pre-commit/pre-commit
+pre-commit==2.12.0 # https://github.com/pre-commit/pre-commit
# Django
# ------------------------------------------------------------------------------
factory-boy==3.2.0 # https://github.com/FactoryBoy/factory_boy
django-debug-toolbar==3.2 # https://github.com/jazzband/django-debug-toolbar
-django-extensions==3.1.1 # https://github.com/django-extensions/django-extensions
+django-extensions==3.1.2 # https://github.com/django-extensions/django-extensions
django-coverage-plugin==1.8.0 # https://github.com/nedbat/django_coverage_plugin
pytest-django==4.1.0 # https://github.com/pytest-dev/pytest-django
diff --git a/{{cookiecutter.project_slug}}/requirements/production.txt b/{{cookiecutter.project_slug}}/requirements/production.txt
index 0ce6fc10e..6e566eccf 100644
--- a/{{cookiecutter.project_slug}}/requirements/production.txt
+++ b/{{cookiecutter.project_slug}}/requirements/production.txt
@@ -2,13 +2,13 @@
-r base.txt
-gunicorn==20.0.4 # https://github.com/benoitc/gunicorn
+gunicorn==20.1.0 # https://github.com/benoitc/gunicorn
psycopg2==2.8.6 # https://github.com/psycopg/psycopg2
{%- if cookiecutter.use_whitenoise == 'n' %}
Collectfast==2.2.0 # https://github.com/antonagestam/collectfast
{%- endif %}
{%- if cookiecutter.use_sentry == "y" %}
-sentry-sdk==0.20.3 # https://github.com/getsentry/sentry-python
+sentry-sdk==1.0.0 # https://github.com/getsentry/sentry-python
{%- endif %}
{%- if cookiecutter.use_docker == "n" and cookiecutter.windows == "y" %}
hiredis==1.1.0 # https://github.com/redis/hiredis-py
diff --git a/{{cookiecutter.project_slug}}/utility/install_python_dependencies.sh b/{{cookiecutter.project_slug}}/utility/install_python_dependencies.sh
index 517934841..e09ebf6f8 100755
--- a/{{cookiecutter.project_slug}}/utility/install_python_dependencies.sh
+++ b/{{cookiecutter.project_slug}}/utility/install_python_dependencies.sh
@@ -33,9 +33,8 @@ if [ -z "$VIRTUAL_ENV" ]; then
echo >&2 -e "\n"
exit 1;
else
-
pip install -r $PROJECT_DIR/requirements/local.txt
- {% if cookiecutter.use_heroku == "y" -%}
+ {%- if cookiecutter.use_heroku == "y" -%}
pip install -r $PROJECT_DIR/requirements.txt
{%- endif %}
fi
diff --git a/{{cookiecutter.project_slug}}/utility/requirements-focal.apt b/{{cookiecutter.project_slug}}/utility/requirements-focal.apt
new file mode 100644
index 000000000..fe6f21e46
--- /dev/null
+++ b/{{cookiecutter.project_slug}}/utility/requirements-focal.apt
@@ -0,0 +1,23 @@
+##basic build dependencies of various Django apps for Ubuntu Focal 20.04
+#build-essential metapackage install: make, gcc, g++,
+build-essential
+#required to translate
+gettext
+python3-dev
+
+##shared dependencies of:
+##Pillow, pylibmc
+zlib1g-dev
+
+##Postgresql and psycopg2 dependencies
+libpq-dev
+
+##Pillow dependencies
+libtiff5-dev
+libjpeg8-dev
+libfreetype6-dev
+liblcms2-dev
+libwebp-dev
+
+##django-extensions
+graphviz-dev
diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/403.html b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/403.html
index 31da98826..4c4745f7d 100644
--- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/403.html
+++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/403.html
@@ -6,4 +6,5 @@
Forbidden (403)
{% if exception %}{{ exception }}{% else %}You're not allowed to access this page.{% endif %}
-{% endblock content %}{% endraw %}
+{% endblock content %}
+{%- endraw %}
diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/404.html b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/404.html
index 187c1fc9d..d98241858 100644
--- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/404.html
+++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/404.html
@@ -6,4 +6,5 @@
Page not found
{% if exception %}{{ exception }}{% else %}This is not the page you were looking for.{% endif %}
-{% endblock content %}{% endraw %}
+{% endblock content %}
+{%- endraw %}
diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/500.html b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/500.html
index 122e0813e..481bb2d0b 100644
--- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/500.html
+++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/500.html
@@ -9,5 +9,4 @@
We track these errors automatically, but if the problem persists feel free to contact us. In the meantime, try refreshing.
{% endblock content %}
-
-{% endraw %}
+{%- endraw %}
diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/account_inactive.html b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/account_inactive.html
index fe9b68078..0713ff110 100644
--- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/account_inactive.html
+++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/account_inactive.html
@@ -9,4 +9,4 @@
{% trans "This account is inactive." %}
{% endblock %}
-{% endraw %}
+{%- endraw %}
diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/base.html b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/base.html
index cd07bbabf..03c86724b 100644
--- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/base.html
+++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/base.html
@@ -8,4 +8,4 @@
{% endblock %}
-{% endraw %}
\ No newline at end of file
+{%- endraw %}
diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/email.html b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/email.html
index 2b7e12789..055904ae9 100644
--- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/email.html
+++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/email.html
@@ -77,4 +77,4 @@ window.addEventListener('DOMContentLoaded',function() {
$('.form-group').removeClass('row');
{% endblock %}
-{% endraw %}
+{%- endraw %}
diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/email_confirm.html b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/email_confirm.html
index eb45cf600..2a0722a1d 100644
--- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/email_confirm.html
+++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/email_confirm.html
@@ -29,4 +29,4 @@
{% endif %}
{% endblock %}
-{% endraw %}
+{%- endraw %}
diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/login.html b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/login.html
index a71932225..247ca690a 100644
--- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/login.html
+++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/login.html
@@ -45,4 +45,4 @@ for a {{ site_name }} account and sign in below:{% endblocktrans %}
{% endblock %}
-{% endraw %}
+{%- endraw %}
diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/logout.html b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/logout.html
index baa8183c9..6659724e0 100644
--- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/logout.html
+++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/logout.html
@@ -16,7 +16,5 @@
{% endif %}
{% trans 'Sign Out' %}
-
-
{% endblock %}
-{% endraw %}
+{%- endraw %}
diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/password_change.html b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/password_change.html
index 62bbbc138..7f2fbed07 100644
--- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/password_change.html
+++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/password_change.html
@@ -14,4 +14,4 @@
{% trans "Change Password" %}
{% endblock %}
-{% endraw %}
+{%- endraw %}
diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/password_reset.html b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/password_reset.html
index b9869fb23..474b0f4a9 100644
--- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/password_reset.html
+++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/password_reset.html
@@ -23,4 +23,4 @@
{% blocktrans %}Please contact us if you have any trouble resetting your password.{% endblocktrans %}
{% endblock %}
-{% endraw %}
+{%- endraw %}
diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/password_reset_done.html b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/password_reset_done.html
index cf2129b1e..94ea2dfbe 100644
--- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/password_reset_done.html
+++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/password_reset_done.html
@@ -7,11 +7,11 @@
{% block inner %}
{% trans "Password Reset" %}
-
+
{% if user.is_authenticated %}
{% include "account/snippets/already_logged_in.html" %}
{% endif %}
-
+
{% blocktrans %}We have sent you an e-mail. Please contact us if you do not receive it within a few minutes.{% endblocktrans %}
{% endblock %}
-{% endraw %}
+{%- endraw %}
diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/password_reset_from_key.html b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/password_reset_from_key.html
index 671eb12c9..66ea9ba60 100644
--- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/password_reset_from_key.html
+++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/password_reset_from_key.html
@@ -22,4 +22,4 @@
{% endif %}
{% endif %}
{% endblock %}
-{% endraw %}
+{%- endraw %}
diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/password_reset_from_key_done.html b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/password_reset_from_key_done.html
index 925b7aa23..7defcc86c 100644
--- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/password_reset_from_key_done.html
+++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/password_reset_from_key_done.html
@@ -7,4 +7,4 @@
{% trans "Change Password" %}
{% trans 'Your password is now changed.' %}
{% endblock %}
-{% endraw %}
+{%- endraw %}
diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/password_set.html b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/password_set.html
index 563a0b185..435ed073e 100644
--- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/password_set.html
+++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/password_set.html
@@ -14,4 +14,4 @@
{% endblock %}
-{% endraw %}
+{%- endraw %}
diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/signup.html b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/signup.html
index 80490a2e1..7a1e29a4d 100644
--- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/signup.html
+++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/signup.html
@@ -20,4 +20,4 @@
{% endblock %}
-{% endraw %}
+{%- endraw %}
diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/signup_closed.html b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/signup_closed.html
index eca9b1568..08b937726 100644
--- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/signup_closed.html
+++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/signup_closed.html
@@ -9,4 +9,4 @@
{% trans "We are sorry, but the sign up is currently closed." %}
{% endblock %}
-{% endraw %}
+{%- endraw %}
diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/verification_sent.html b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/verification_sent.html
index ccc8d9a1f..4394e9c67 100644
--- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/verification_sent.html
+++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/verification_sent.html
@@ -10,4 +10,4 @@
{% blocktrans %}We have sent an e-mail to you for verification. Follow the link provided to finalize the signup process. Please contact us if you do not receive it within a few minutes.{% endblocktrans %}
{% endblock %}
-{% endraw %}
+{%- endraw %}
diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/verified_email_required.html b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/verified_email_required.html
index f3078b68e..8eafcbedb 100644
--- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/verified_email_required.html
+++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/account/verified_email_required.html
@@ -18,7 +18,5 @@ verification. Please click on the link inside this e-mail. Please
contact us if you do not receive it within a few minutes.{% endblocktrans %}
{% blocktrans %}Note: you can still change your e-mail address .{% endblocktrans %}
-
-
{% endblock %}
-{% endraw %}
+{%- endraw %}
diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/base.html b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/base.html
index 127068878..c36794048 100644
--- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/base.html
+++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/base.html
@@ -16,43 +16,43 @@
{% block css %}
- {% endraw %}{% if cookiecutter.custom_bootstrap_compilation == "n" %}{% raw %}
+ {%- endraw %}{% if cookiecutter.custom_bootstrap_compilation == "n" %}{% raw %}
- {% endraw %}{% endif %}{% raw %}
+ {%- endraw %}{% endif %}{% raw %}
- {% endraw %}{% if cookiecutter.use_compressor == "y" %}{% raw %}{% compress css %}{% endraw %}{% endif %}{% raw %}
+ {%- endraw %}{% if cookiecutter.use_compressor == "y" %}{% raw %}{% compress css %}{% endraw %}{% endif %}{% raw %}
- {% endraw %}{% if cookiecutter.js_task_runner == "Gulp" and cookiecutter.use_compressor == "n" %}{% raw %}
+ {%- endraw %}{% if cookiecutter.js_task_runner == "Gulp" and cookiecutter.use_compressor == "n" %}{% raw %}
- {% endraw %}{% else %}{% raw %}
+ {%- endraw %}{% else %}{% raw %}
- {% endraw %}{% endif %}{% raw %}
- {% endraw %}{% if cookiecutter.use_compressor == "y" %}{% raw %}{% endcompress %}{% endraw %}{% endif %}{% raw %}
+ {%- endraw %}{% endif %}{% raw %}
+ {%- endraw %}{% if cookiecutter.use_compressor == "y" %}{% raw %}{% endcompress %}{% endraw %}{% endif %}{% raw %}
{% endblock %}
{# Placed at the top of the document so pages load faster with defer #}
{% block javascript %}
- {% endraw %}{% if cookiecutter.custom_bootstrap_compilation == "y" and cookiecutter.js_task_runner == "Gulp" %}{% raw %}
+ {%- endraw %}{% if cookiecutter.custom_bootstrap_compilation == "y" and cookiecutter.js_task_runner == "Gulp" %}{% raw %}
- {% endraw %}{% if cookiecutter.use_compressor == "y" %}{% raw %}{% compress js %}{% endraw %}{% endif %}{% raw %}
+ {%- endraw %}{% if cookiecutter.use_compressor == "y" %}{% raw %}{% compress js %}{% endraw %}{% endif %}{% raw %}
- {% endraw %}{% if cookiecutter.use_compressor == "y" %}{% raw %}{% endcompress %}{% endraw %}{% endif %}{% raw %}
- {% endraw %}{% else %}{% raw %}
+ {%- endraw %}{% if cookiecutter.use_compressor == "y" %}{% raw %}{% endcompress %}{% endraw %}{% endif %}{% raw %}
+ {%- endraw %}{% else %}{% raw %}
- {% endraw %}{% endif %}{% raw %}
+ {%- endraw %}{% endif %}{% raw %}
- {% endraw %}{% if cookiecutter.use_compressor == "y" %}{% raw %}{% compress js %}{% endraw %}{% endif %}{% raw %}
+ {%- endraw %}{% if cookiecutter.use_compressor == "y" %}{% raw %}{% compress js %}{% endraw %}{% endif %}{% raw %}
- {% endraw %}{% if cookiecutter.use_compressor == "y" %}{% raw %}{% endcompress %}{% endraw %}{% endif %}{% raw %}
+ {%- endraw %}{% if cookiecutter.use_compressor == "y" %}{% raw %}{% endcompress %}{% endraw %}{% endif %}{% raw %}
{% endblock javascript %}
@@ -121,4 +121,4 @@
{% endblock inline_javascript %}