change generic views to DetailViews
This commit is contained in:
@@ -4,11 +4,13 @@ from . import apps
|
||||
from . import views
|
||||
from .views import (
|
||||
AttachmentCreateView,
|
||||
AttachmentDetailView,
|
||||
AttachmentUpdateView,
|
||||
EtherpadCreateView,
|
||||
FileUploadCreateView,
|
||||
TaskCreateView,
|
||||
TopicCreateView,
|
||||
TopicDetailView,
|
||||
TopicUpdateView,
|
||||
)
|
||||
|
||||
@@ -22,7 +24,7 @@ urlpatterns = [
|
||||
TopicCreateView.as_view(),
|
||||
name="topic-create",
|
||||
),
|
||||
path("<slug:slug>/", views.show_topic, name="topic"),
|
||||
path("<slug:slug>/", TopicDetailView.as_view(), name="topic"),
|
||||
path(
|
||||
"<slug:slug>/update/",
|
||||
TopicUpdateView.as_view(),
|
||||
@@ -34,7 +36,11 @@ urlpatterns = [
|
||||
name="attachment-create",
|
||||
),
|
||||
path("<slug:slug>/create/", TaskCreateView.as_view(), name="task-create"),
|
||||
path("<slug:topic_slug>/<slug:slug>/", views.show_attachment, name="attachment"),
|
||||
path(
|
||||
"<slug:topic_slug>/<slug:slug>/",
|
||||
AttachmentDetailView.as_view(),
|
||||
name="attachment",
|
||||
),
|
||||
path(
|
||||
"<slug:topic_slug>/<slug:slug>/update/",
|
||||
AttachmentUpdateView.as_view(),
|
||||
|
||||
@@ -6,6 +6,7 @@ from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.db.models import F, Q
|
||||
from django.http import HttpResponseRedirect, Http404
|
||||
from django.shortcuts import render
|
||||
from django.views.generic.detail import DetailView
|
||||
from django.views.generic.edit import CreateView, UpdateView
|
||||
from django.urls import reverse_lazy, reverse
|
||||
|
||||
@@ -45,108 +46,6 @@ def index(request):
|
||||
return render(request, "intern/index.html", context)
|
||||
|
||||
|
||||
@authenticated_user
|
||||
def show_topic(request, slug=None):
|
||||
active_topic = Topic.objects.filter(slug=slug).first()
|
||||
if not active_topic:
|
||||
raise Http404("wrong topic")
|
||||
|
||||
attachments = Attachment.objects.filter(topic__slug=slug).order_by("title")
|
||||
|
||||
tasks = None
|
||||
if active_topic.task_list:
|
||||
tasks = deque(
|
||||
Task.taskmanager.get_tasks(
|
||||
user=request.user.id,
|
||||
completed=False,
|
||||
task_list=active_topic.task_list,
|
||||
all_tasks=True,
|
||||
)
|
||||
)
|
||||
|
||||
context = {
|
||||
"active_topic": active_topic,
|
||||
"attachments": attachments,
|
||||
"tasks": tasks,
|
||||
}
|
||||
|
||||
return render(request, "intern/topic.html", context)
|
||||
|
||||
|
||||
@authenticated_user
|
||||
def show_attachment(request, topic_slug=None, slug=None):
|
||||
attachment = Attachment.objects.filter(
|
||||
Q(topic__slug=topic_slug) & Q(slug=slug)
|
||||
).first()
|
||||
if not attachment:
|
||||
raise Http404("wrong attachment")
|
||||
|
||||
active_topic = Topic.objects.filter(slug=topic_slug).first()
|
||||
|
||||
if request.method == "POST":
|
||||
if "btn_etherpad" in request.POST:
|
||||
form = EtherpadForm(request.POST)
|
||||
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
return HttpResponseRedirect(request.path)
|
||||
|
||||
else:
|
||||
for elem in list(form.errors.values()):
|
||||
messages.info(request, "; ".join(elem))
|
||||
|
||||
if "btn_fileupload" in request.POST:
|
||||
form = FileUploadForm(request.POST, request.FILES)
|
||||
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
return HttpResponseRedirect(request.path)
|
||||
|
||||
else:
|
||||
for elem in list(form.errors.values()):
|
||||
messages.info(request, "; ".join(elem))
|
||||
|
||||
initial = {
|
||||
"attachment": attachment,
|
||||
}
|
||||
|
||||
form_add_etherpad = EtherpadForm(initial=initial)
|
||||
form_add_file = FileUploadForm(initial=initial)
|
||||
|
||||
files = FileUpload.objects.filter(attachment=attachment)
|
||||
|
||||
etherpads = Etherpad.objects.filter(attachment=attachment).order_by("-date")
|
||||
etherpad_list = deque([])
|
||||
|
||||
# list of etherpad url-link of any etherpads
|
||||
for elem in etherpads:
|
||||
etherpad_list.append(
|
||||
{
|
||||
"title": elem.title,
|
||||
"date": elem.date,
|
||||
"etherpad_key": get_pad_link(elem.etherpad_key),
|
||||
}
|
||||
)
|
||||
|
||||
context = {
|
||||
"form_add_etherpad": form_add_etherpad,
|
||||
"form_add_file": form_add_file,
|
||||
"active_topic": active_topic,
|
||||
"attachment": attachment,
|
||||
"etherpads": etherpad_list,
|
||||
"files": files,
|
||||
}
|
||||
|
||||
response = render(request, "intern/attachment.html", context)
|
||||
|
||||
try:
|
||||
response = add_ep_cookie(request, response)
|
||||
except Exception as e:
|
||||
logger.info("Etherpad Server doesn't work. Error: %s", e)
|
||||
|
||||
return response
|
||||
|
||||
|
||||
class TopicCreateView(LoginRequiredMixin, CreateView):
|
||||
model = Topic
|
||||
success_url = reverse_lazy("intern:index")
|
||||
@@ -170,6 +69,49 @@ class TopicCreateView(LoginRequiredMixin, CreateView):
|
||||
self.slug = self.kwargs.get("topic_group")
|
||||
|
||||
|
||||
class TopicDetailView(LoginRequiredMixin, DetailView):
|
||||
model = Topic
|
||||
template_name = "intern/topic/topic_detail.html"
|
||||
|
||||
slug = None
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
|
||||
self.slug = self.object.slug
|
||||
|
||||
active_topic = Topic.objects.get(id=self.object.id)
|
||||
attachments = Attachment.objects.filter(topic__slug=self.slug).order_by("title")
|
||||
|
||||
print(self.request.user.id)
|
||||
|
||||
tasks = None
|
||||
if active_topic.task_list:
|
||||
tasks = deque(
|
||||
Task.taskmanager.get_tasks(
|
||||
user=None,
|
||||
assigned_tasks=True,
|
||||
task_list=active_topic.task_list,
|
||||
completed=False,
|
||||
)
|
||||
)
|
||||
|
||||
context = {
|
||||
"active_topic": active_topic,
|
||||
"attachments": attachments,
|
||||
"tasks": tasks,
|
||||
}
|
||||
|
||||
return context
|
||||
|
||||
def get_success_url(self):
|
||||
context = {
|
||||
"slug": self.slug,
|
||||
}
|
||||
|
||||
return reverse("intern:topic", kwargs=context)
|
||||
|
||||
|
||||
class TopicUpdateView(LoginRequiredMixin, UpdateView):
|
||||
model = Topic
|
||||
template_name = "intern/topic/topic_update.html"
|
||||
@@ -234,6 +176,49 @@ class AttachmentCreateView(LoginRequiredMixin, CreateView):
|
||||
return reverse("intern:topic", kwargs=context)
|
||||
|
||||
|
||||
class AttachmentDetailView(LoginRequiredMixin, DetailView):
|
||||
model = Attachment
|
||||
template_name = "intern/attachment/attachment_detail.html"
|
||||
|
||||
topic_slug = None
|
||||
slug = None
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
response = super().get(request, *args, **kwargs)
|
||||
|
||||
try:
|
||||
response = add_ep_cookie(self.request, response)
|
||||
except Exception as e:
|
||||
logger.info("Etherpad Server doesn't work. Error: %s", e)
|
||||
|
||||
return response
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
|
||||
self.topic_slug = self.object.topic.slug
|
||||
self.slug = self.object.slug
|
||||
|
||||
context["active_topic"] = Topic.objects.get(slug=self.topic_slug)
|
||||
|
||||
attachment = Attachment.objects.get(id=self.object.id)
|
||||
context["attachment"] = attachment
|
||||
|
||||
etherpads = Etherpad.objects.filter(attachment=attachment).order_by("-date")
|
||||
context["etherpads"] = etherpads
|
||||
context["files"] = FileUpload.objects.filter(attachment=attachment)
|
||||
|
||||
return context
|
||||
|
||||
def get_success_url(self):
|
||||
context = {
|
||||
"topic_slug": self.topic_slug,
|
||||
"slug": self.slug,
|
||||
}
|
||||
|
||||
return reverse("intern:attachment", kwargs=context)
|
||||
|
||||
|
||||
class AttachmentUpdateView(LoginRequiredMixin, UpdateView):
|
||||
model = Attachment
|
||||
template_name = "intern/attachment/attachment_update.html"
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
</a>
|
||||
|
||||
{% for etherpad in etherpads %}
|
||||
<a href="{{ etherpad.etherpad_key }}" class="flex justify-between items-center gap-2">
|
||||
<a href="{{ etherpad.get_absolute_url }}" class="flex justify-between items-center gap-2">
|
||||
<h3 class="text-gray-800 dark:text-gray-200">{{ etherpad.title }}</h2>
|
||||
<span class=" text-gray-700 dark:text-gray-300">{{ etherpad.date }}<span class="ml-2 hidden sm:inline-block"><i class="fa-solid fa-angle-right text-gray-400 dark:text-gray-600"></i></span>
|
||||
</a>
|
||||
@@ -13,7 +13,6 @@
|
||||
<span class="cursor-default">{{ active_topic.title }}</span>
|
||||
</aside>
|
||||
|
||||
<!-- TODO: description -->
|
||||
{% if active_topic.description %}
|
||||
<div class="db-page-content-left">
|
||||
{{ active_topic.description|safe }}
|
||||
@@ -21,6 +20,15 @@
|
||||
{% endif %}
|
||||
|
||||
<!-- TODO: tasks -->
|
||||
{% if tasks %}
|
||||
<ul class="flex flex-col gap-1 max-w-fit">
|
||||
{% for task in tasks %}
|
||||
<li>
|
||||
<span class="ml-2">{{ task.title|truncatechars:45 }} <a href="{% url 'tasks:task-detail' task.slug %}" class="inline-block text-proprietary dark:text-proprietary-lighter">Link <i class="fa-solid fa-link"></i></a></span>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
<ul class="flex flex-col gap-1 max-w-fit">
|
||||
{% for attachment in attachments %}
|
||||
@@ -42,8 +50,4 @@
|
||||
</section>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
|
||||
|
||||
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user