Coverage for learning_logs/views.py: 57.78%
74 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-08-31 09:09 -0700
« prev ^ index » next coverage.py v7.10.6, created at 2025-08-31 09:09 -0700
1from django.contrib.auth.decorators import login_required
2from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator
3from django.http import Http404
4from django.shortcuts import get_object_or_404, redirect, render
6from .forms import EntryForm, TopicForm
7from .models import Entry, Topic
10@login_required()
11def topics(request):
12 """Show all topics."""
13 topics = Topic.objects.filter(owner=request.user).order_by("date_added") 1d
14 page = request.GET.get("page", 1) 1d
16 paginator = Paginator(topics, 3) 1d
17 try: 1d
18 topics = paginator.page(page) 1d
19 except PageNotAnInteger:
20 topics = paginator.page(1)
21 except EmptyPage:
22 topics = paginator.page(paginator.num_pages)
24 context = {"topics": topics} 1d
25 return render(request, "learning_logs/topics.html", context) 1d
28@login_required()
29def topic(request, topic_id):
30 """Show a single topic and all its entries."""
31 topic = get_object_or_404(Topic, id=topic_id) 1b
32 page = request.GET.get("page", 1) 1b
33 # Make sure the topic belongs to the current user.
34 if topic.owner != request.user: 34 ↛ 35line 34 didn't jump to line 35 because the condition on line 34 was never true1b
35 raise Http404
36 entries = topic.entry_set.order_by("-date_added") 1b
37 paginator = Paginator(entries, 3) 1b
38 try: 1b
39 entries = paginator.page(page) 1b
40 except PageNotAnInteger:
41 entries = paginator.page(1)
42 except EmptyPage:
43 entries = paginator.page(paginator.num_pages)
45 context = {"topic": topic, "entries": entries} 1b
46 return render(request, "learning_logs/topic.html", context) 1b
49@login_required()
50def new_topic(request):
51 """Add a new topic."""
52 if request.method != "POST": 52 ↛ 54line 52 didn't jump to line 54 because the condition on line 52 was never true1e
53 # No data submitted; create a blank form.
54 form = TopicForm()
55 else:
56 # POST data submitted; process data.
57 form = TopicForm(data=request.POST) 1e
58 if form.is_valid(): 58 ↛ 65line 58 didn't jump to line 65 because the condition on line 58 was always true1e
59 new_topic = form.save(commit=False) 1e
60 new_topic.owner = request.user 1e
61 new_topic.save() 1e
62 return redirect("topics") 1e
64 # Display a blank or invalid form.
65 context = {"form": form}
66 return render(request, "learning_logs/new_topic.html", context)
69@login_required()
70def new_entry(request, topic_id):
71 """Add a new entry for a particular topic."""
72 topic = Topic.objects.get(id=topic_id) 1c
74 if request.method != "POST": 74 ↛ 76line 74 didn't jump to line 76 because the condition on line 74 was never true1c
75 # No data submitted; create a blank form.
76 form = EntryForm()
77 else:
78 # POST data submitted; process data.
79 form = EntryForm(data=request.POST) 1c
80 if form.is_valid(): 80 ↛ 87line 80 didn't jump to line 87 because the condition on line 80 was always true1c
81 new_entry = form.save(commit=False) 1c
82 new_entry.topic = topic 1c
83 new_entry.save() 1c
84 return redirect("topic", topic_id=topic_id) 1c
86 # Display a blank or invalid form.
87 context = {"topic": topic, "form": form}
88 return render(request, "learning_logs/new_entry.html", context)
91@login_required()
92def edit_entry(request, entry_id):
93 """Edit an existing entry."""
94 entry = Entry.objects.get(id=entry_id)
95 topic = entry.topic
96 if topic.owner != request.user:
97 raise Http404
99 if request.method != "POST":
100 # Initial request; pre-fill form with the current entry.
101 form = EntryForm(instance=entry)
102 else:
103 # Post data submitted; process data.
104 form = EntryForm(instance=entry, data=request.POST)
105 if form.is_valid():
106 form.save()
107 return redirect("topic", topic_id=topic.id)
109 context = {"entry": entry, "topic": topic, "form": form}
110 return render(request, "learning_logs/edit_entry.html", context)