Coverage for learning_logs/views.py: 57.78%

74 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-10-12 08:03 -0700

1from django.contrib.auth.decorators import login_required 1a

2from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator 1a

3from django.http import Http404 1a

4from django.shortcuts import get_object_or_404, redirect, render 1a

5 

6from .forms import EntryForm, TopicForm 1a

7from .models import Entry, Topic 1a

8 

9 

10@login_required() 1a

11def topics(request): 1a

12 """Show all topics.""" 

13 topics = Topic.objects.filter(owner=request.user).order_by("date_added") 1a

14 page = request.GET.get("page", 1) 1a

15 

16 paginator = Paginator(topics, 3) 1a

17 try: 1a

18 topics = paginator.page(page) 1a

19 except PageNotAnInteger: 

20 topics = paginator.page(1) 

21 except EmptyPage: 

22 topics = paginator.page(paginator.num_pages) 

23 

24 context = {"topics": topics} 1a

25 return render(request, "learning_logs/topics.html", context) 1a

26 

27 

28@login_required() 1a

29def topic(request, topic_id): 1a

30 """Show a single topic and all its entries.""" 

31 topic = get_object_or_404(Topic, id=topic_id) 1a

32 page = request.GET.get("page", 1) 1a

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 true1a

35 raise Http404 

36 entries = topic.entry_set.order_by("-date_added") 1a

37 paginator = Paginator(entries, 3) 1a

38 try: 1a

39 entries = paginator.page(page) 1a

40 except PageNotAnInteger: 

41 entries = paginator.page(1) 

42 except EmptyPage: 

43 entries = paginator.page(paginator.num_pages) 

44 

45 context = {"topic": topic, "entries": entries} 1a

46 return render(request, "learning_logs/topic.html", context) 1a

47 

48 

49@login_required() 1a

50def new_topic(request): 1a

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 true1a

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) 1a

58 if form.is_valid(): 58 ↛ 65line 58 didn't jump to line 65 because the condition on line 58 was always true1a

59 new_topic = form.save(commit=False) 1a

60 new_topic.owner = request.user 1a

61 new_topic.save() 1a

62 return redirect("topics") 1a

63 

64 # Display a blank or invalid form. 

65 context = {"form": form} 

66 return render(request, "learning_logs/new_topic.html", context) 

67 

68 

69@login_required() 1a

70def new_entry(request, topic_id): 1a

71 """Add a new entry for a particular topic.""" 

72 topic = Topic.objects.get(id=topic_id) 1a

73 

74 if request.method != "POST": 74 ↛ 76line 74 didn't jump to line 76 because the condition on line 74 was never true1a

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) 1a

80 if form.is_valid(): 80 ↛ 87line 80 didn't jump to line 87 because the condition on line 80 was always true1a

81 new_entry = form.save(commit=False) 1a

82 new_entry.topic = topic 1a

83 new_entry.save() 1a

84 return redirect("topic", topic_id=topic_id) 1a

85 

86 # Display a blank or invalid form. 

87 context = {"topic": topic, "form": form} 

88 return render(request, "learning_logs/new_entry.html", context) 

89 

90 

91@login_required() 1a

92def edit_entry(request, entry_id): 1a

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 

98 

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) 

108 

109 context = {"entry": entry, "topic": topic, "form": form} 

110 return render(request, "learning_logs/edit_entry.html", context)