mirror of
https://github.com/kristoferssolo/FOSSDB.git
synced 2025-10-21 17:50:35 +00:00
Show user project in profile
This commit is contained in:
parent
5189b4a537
commit
a48a0a3305
@ -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 %}
|
||||||
|
|||||||
@ -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"),
|
||||||
]
|
]
|
||||||
|
|||||||
@ -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)
|
||||||
|
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user