Show user project in profile

This commit is contained in:
Kristofers Solo 2023-06-29 17:31:59 +00:00
parent 5189b4a537
commit a48a0a3305
6 changed files with 56 additions and 8 deletions

View File

@ -3,8 +3,20 @@
{% block title %}{{ title }}{% endblock %} {% block title %}{{ title }}{% endblock %}
{% block meta %}{% endblock %} {% block meta %}{% endblock %}
{% block content %} {% block content %}
<h1>{{ user.username }}</h1> <div class="py-8 px-32">
<img src="{{ user.profile_picture.url }}" <h1 class="font-abel text-4xl mb-8">My Projects</h1>
alt="{{ user.username }}s profile picture" /> <div class="grid grid-cols-1 gap-4">
<p>{{ user.email }}</p> {% for project in projects %}
<div class="border border-steelblue-100 p-8 flex flex-row gap-4 justify-between">
<a href="{{ project.get_absolute_url }}"
class="hover:text-steelblue-100 transition duration-300 ease-linear">
<h2 class="font-abel text-2xl">{{ project.name }}</h2>
</a>
<p class="max-w-xs text-justify">{{ project.description|slice:500 }}</p>
</div>
{% empty %}
<p class="text-center font-abel text-xl">No projects yet.</p>
{% endfor %}
</div>
</div>
{% endblock %} {% endblock %}

View File

@ -5,5 +5,5 @@ from . import views
urlpatterns = [ urlpatterns = [
path("signup/", views.signup_view, name="signup"), path("signup/", views.signup_view, name="signup"),
path("login/", views.login_view, name="login"), path("login/", views.login_view, name="login"),
path("<str:username>/", views.profile, name="profile"), path("<str:username>/", views.ProfileProjectListView.as_view(), name="profile"),
] ]

View File

@ -1,10 +1,29 @@
from django.contrib.auth import authenticate, login from django.contrib.auth import authenticate, login
from django.contrib.auth.mixins import LoginRequiredMixin
from django.shortcuts import get_object_or_404, redirect, render from django.shortcuts import get_object_or_404, redirect, render
from django.views.generic import ListView
from fossdb.models import Project
from .forms import LoginForm, SignUpForm from .forms import LoginForm, SignUpForm
from .models import User from .models import User
class ProfileProjectListView(LoginRequiredMixin, ListView):
model = Project
template_name = "profile.html"
context_object_name = "projects"
login_url = "/login/"
redirect_field_name = "redirect_to"
def get_queryset(self):
return Project.objects.filter(owner=self.request.user)
def get_context_data(self, *args, **kwargs):
data = super().get_context_data(**kwargs)
data["title"] = self.request.user.username + ("" if not self.request.user.full_name else f" ({self.request.user.full_name})")
return data
def profile(request, username): def profile(request, username):
user = get_object_or_404(User, username=username) user = get_object_or_404(User, username=username)

View File

@ -1,6 +1,6 @@
{% extends "base.html" %} {% extends "base.html" %}
{% load static %} {% load static %}
{% block title %}Delete {{ project }}{% endblock %} {% block title %}{{ title }}{% endblock %}
{% block content %} {% block content %}
<form method="post" <form method="post"
id="delete-form" id="delete-form"
@ -9,7 +9,7 @@
{% csrf_token %} {% csrf_token %}
<input type="text" <input type="text"
id="confirm-input" id="confirm-input"
class="text-center form-field border-slategray-200 hover:border-indianred-100 bg-gray-300 focus:border-indianred-100 transition delay-200 ease-linear" /> class="text-center form-field border-slategray-200 hover:border-lightcoral bg-gray-300 focus:border-indianred-100 transition ease-linear" />
<button id="submit-button" <button id="submit-button"
class="button submit-button-disabled text-lightsteelblue-100 bg-slategray-200 uppercase font-bold" class="button submit-button-disabled text-lightsteelblue-100 bg-slategray-200 uppercase font-bold"
type="submit">Delete</button> type="submit">Delete</button>

View File

@ -15,7 +15,7 @@
<p class="max-w-xs text-justify">{{ project.description|slice:500 }}</p> <p class="max-w-xs text-justify">{{ project.description|slice:500 }}</p>
</div> </div>
{% empty %} {% empty %}
<p>No projects yet.</p> <p class="text-center font-abel text-xl">No projects yet.</p>
{% endfor %} {% endfor %}
</div> </div>
</div> </div>

View File

@ -28,6 +28,11 @@ class SearchResultsListView(ListView):
| Q(programming_language__name__icontains=query) | Q(programming_language__name__icontains=query)
).distinct() ).distinct()
def get_context_data(self, *args, **kwargs):
data = super().get_context_data(**kwargs)
data["title"] = "FOSSDB | Search"
return data
class ProjectListView(ListView): class ProjectListView(ListView):
model = Project model = Project
@ -35,6 +40,11 @@ class ProjectListView(ListView):
context_object_name = "projects" context_object_name = "projects"
paginate_by = 50 # amount of items on screen paginate_by = 50 # amount of items on screen
def get_context_data(self, *args, **kwargs):
data = super().get_context_data(**kwargs)
data["title"] = "FOSSDB | Explore"
return data
class ProjectCreateView(LoginRequiredMixin, CreateView): class ProjectCreateView(LoginRequiredMixin, CreateView):
model = Project model = Project
@ -45,6 +55,7 @@ class ProjectCreateView(LoginRequiredMixin, CreateView):
def get_context_data(self, *args, **kwargs): def get_context_data(self, *args, **kwargs):
data = super().get_context_data(**kwargs) data = super().get_context_data(**kwargs)
data["title"] = "FOSSDB | Create Project"
data["hosting_platform"] = HostingPlatformForm(self.request.POST or None) data["hosting_platform"] = HostingPlatformForm(self.request.POST or None)
data["programming_languages"] = ProgrammingLanguageInlineFormSet(self.request.POST or None) data["programming_languages"] = ProgrammingLanguageInlineFormSet(self.request.POST or None)
return data return data
@ -95,6 +106,7 @@ class ProjectUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
def get_context_data(self, *args, **kwargs): def get_context_data(self, *args, **kwargs):
data = super().get_context_data(**kwargs) data = super().get_context_data(**kwargs)
data["title"] = f"Edit {self.object}"
data["hosting_platform"] = HostingPlatformForm(self.request.POST or None, instance=self.object.projecthostingplatform) data["hosting_platform"] = HostingPlatformForm(self.request.POST or None, instance=self.object.projecthostingplatform)
data["programming_languages"] = ProgrammingLanguageInlineFormSet(self.request.POST or None, instance=self.object) data["programming_languages"] = ProgrammingLanguageInlineFormSet(self.request.POST or None, instance=self.object)
return data return data
@ -133,3 +145,8 @@ class ProjectDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
def handle_no_permission(self): def handle_no_permission(self):
return redirect("login") return redirect("login")
def get_context_data(self, *args, **kwargs):
data = super().get_context_data(**kwargs)
data["title"] = f"Delete {self.object}"
return data