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),
]