From c17e3e85f24cf4375d2362c21d5b910ed2f2ebe6 Mon Sep 17 00:00:00 2001 From: WGAVermeer <90707235+WGAVermeer@users.noreply.github.com> Date: Wed, 25 Mar 2026 17:11:14 +0100 Subject: [PATCH] added auto-reload when developing. --- .docker-compose-files/compose.dev.yaml | 2 +- Makefile | 10 ++++++++++ requirements.txt | 2 ++ src/polls/templates/polls/detail.html | 11 +++++++++++ src/polls/templates/polls/index.html | 19 +++++++++++++++++++ src/polls/urls.py | 7 +++++++ src/polls/views.py | 23 +++++++++++++++++++---- src/website/settings.py | 3 +++ src/website/urls.py | 1 + 9 files changed, 73 insertions(+), 5 deletions(-) create mode 100644 src/polls/templates/polls/detail.html create mode 100644 src/polls/templates/polls/index.html diff --git a/.docker-compose-files/compose.dev.yaml b/.docker-compose-files/compose.dev.yaml index f5920c2..a47c7c6 100644 --- a/.docker-compose-files/compose.dev.yaml +++ b/.docker-compose-files/compose.dev.yaml @@ -1,6 +1,6 @@ services: web: - command: gunicorn -b 0.0.0.0:8000 website.wsgi:application + command: gunicorn --capture-output --enable-stdio-inheritance -b 0.0.0.0:8000 website.wsgi:application volumes: - ./src:/src env_file: diff --git a/Makefile b/Makefile index fc20bf0..71226fa 100644 --- a/Makefile +++ b/Makefile @@ -11,6 +11,16 @@ dev: docker exec quatsh-website-web-1 python manage.py collectstatic --noinput docker exec -it quatsh-website-web-1 sh +dev_restart: + docker compose down + docker compose -f ./compose.yaml -f ./.docker-compose-files/compose.dev.yaml up -d + docker exec -it quatsh-website-web-1 sh + +dev_restart_with_logs: + docker compose down + docker compose -f ./compose.yaml -f ./.docker-compose-files/compose.dev.yaml up + + test: docker compose --env-file .env.template -f ./compose.yaml -f ./.docker-compose-files/compose.test.yaml up --build --abort-on-container-exit --exit-code-from web diff --git a/requirements.txt b/requirements.txt index d340205..daa4177 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,5 @@ Django==6.0.3 gunicorn==25.1.0 psycopg [binary] ==3.3.3 +django-browser-reload +django-watchfiles diff --git a/src/polls/templates/polls/detail.html b/src/polls/templates/polls/detail.html new file mode 100644 index 0000000..d657719 --- /dev/null +++ b/src/polls/templates/polls/detail.html @@ -0,0 +1,11 @@ + + + + + My test page + + +

Hey This is a test of watchfiles + browser reload!

+ {{ question }} + + diff --git a/src/polls/templates/polls/index.html b/src/polls/templates/polls/index.html new file mode 100644 index 0000000..ccd78c2 --- /dev/null +++ b/src/polls/templates/polls/index.html @@ -0,0 +1,19 @@ + + + + + My test page + + + {% if latest_question_list %} + + {% else %} +

No polls are available.

+ {% endif %} + + + diff --git a/src/polls/urls.py b/src/polls/urls.py index 5119061..fc78e3e 100644 --- a/src/polls/urls.py +++ b/src/polls/urls.py @@ -3,5 +3,12 @@ from django.urls import path from . import views urlpatterns = [ + # ex: /polls/ path("", views.index, name="index"), + # ex: /polls/5/ + path("/", views.detail, name="detail"), + # ex: /polls/5/results/ + path("/results/", views.results, name="results"), + # ex: /polls/5/vote/ + path("/vote/", views.vote, name="vote"), ] diff --git a/src/polls/views.py b/src/polls/views.py index 933bf0d..5e8ef07 100644 --- a/src/polls/views.py +++ b/src/polls/views.py @@ -1,9 +1,24 @@ -from django.shortcuts import render -from django.http import HttpResponse +from django.http import HttpResponse, Http404 +from django.shortcuts import get_object_or_404, render + +from .models import Question def index(request): - return HttpResponse("Hello, world. You're at the polls index.") + latest_question_list = Question.objects.order_by("-pub_date")[:5] + context = {"latest_question_list": latest_question_list} + return render(request, "polls/index.html", context) -# Create your views here. +def detail(request, question_id): + question = get_object_or_404(Question, pk=question_id) + return render(request, "polls/detail.html", {"question": question}) + + +def results(request, question_id): + response = "You're looking at the results of question %s." + return HttpResponse(response % question_id) + + +def vote(request, question_id): + return HttpResponse("You're voting on question %s." % question_id) diff --git a/src/website/settings.py b/src/website/settings.py index 2ee0b3b..b12274a 100644 --- a/src/website/settings.py +++ b/src/website/settings.py @@ -40,6 +40,8 @@ INSTALLED_APPS = [ "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", + "django_browser_reload", + "django_watchfiles", ] MIDDLEWARE = [ @@ -50,6 +52,7 @@ MIDDLEWARE = [ "django.contrib.auth.middleware.AuthenticationMiddleware", "django.contrib.messages.middleware.MessageMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware", + "django_browser_reload.middleware.BrowserReloadMiddleware", ] ROOT_URLCONF = "website.urls" diff --git a/src/website/urls.py b/src/website/urls.py index 37f07e2..08481ca 100644 --- a/src/website/urls.py +++ b/src/website/urls.py @@ -19,6 +19,7 @@ from django.contrib import admin from django.urls import path, include urlpatterns = [ + path("__reload__/", include("django_browser_reload.urls")), path("polls/", include("polls.urls")), path("admin/", admin.site.urls), ]