aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site/apps/content/views
diff options
context:
space:
mode:
authorGravatar ks129 <[email protected]>2020-10-04 18:55:33 +0300
committerGravatar ks129 <[email protected]>2020-10-04 18:55:33 +0300
commitaff3a89c3cec04eda096e8f27115e36108ee6286 (patch)
tree299fb51b60916e6b552fa1ac7e0e05dbef512343 /pydis_site/apps/content/views
parentAdd more information to how to write a guide guide (diff)
Change guides system to content system
As this system will be used for more than just guides, I had to do some refactoring to match this system with plans. Basically now there isn't guides, but articles instead.
Diffstat (limited to 'pydis_site/apps/content/views')
-rw-r--r--pydis_site/apps/content/views/__init__.py5
-rw-r--r--pydis_site/apps/content/views/article.py50
-rw-r--r--pydis_site/apps/content/views/articles.py14
-rw-r--r--pydis_site/apps/content/views/category.py18
4 files changed, 87 insertions, 0 deletions
diff --git a/pydis_site/apps/content/views/__init__.py b/pydis_site/apps/content/views/__init__.py
new file mode 100644
index 00000000..b50d487b
--- /dev/null
+++ b/pydis_site/apps/content/views/__init__.py
@@ -0,0 +1,5 @@
+from .category import CategoryView
+from .article import ArticleView
+from .articles import ArticlesView
+
+__all__ = ["ArticleView", "ArticlesView", "CategoryView"]
diff --git a/pydis_site/apps/content/views/article.py b/pydis_site/apps/content/views/article.py
new file mode 100644
index 00000000..b34ca3ee
--- /dev/null
+++ b/pydis_site/apps/content/views/article.py
@@ -0,0 +1,50 @@
+import os
+from datetime import datetime
+from typing import Optional
+
+from django.conf import settings
+from django.core.handlers.wsgi import WSGIRequest
+from django.http import HttpResponse
+from django.shortcuts import render
+from django.views import View
+
+from pydis_site.apps.content.utils import get_category, get_article
+
+
+class ArticleView(View):
+ """Shows specific guide page."""
+
+ def get(self, request: WSGIRequest, article: str, category: Optional[str] = None) -> HttpResponse:
+ """Collect guide content and display it. When guide don't exist, return 404."""
+ article_result = get_article(article, category)
+
+ if category is not None:
+ path = os.path.join(
+ settings.BASE_DIR, "pydis_site", "apps", "content", "resources", "content", category, f"{article}.md"
+ )
+ else:
+ path = os.path.join(
+ settings.BASE_DIR, "pydis_site", "apps", "content", "resources", "content", f"{article}.md"
+ )
+
+ if category is not None:
+ category_data = get_category(category)
+ category_data["raw_name"] = category
+ else:
+ category_data = {"name": None, "raw_name": None}
+
+ return render(
+ request,
+ "content/article.html",
+ {
+ "article": article_result,
+ "last_modified": datetime.fromtimestamp(os.path.getmtime(path)).strftime("%dth %B %Y"),
+ "category_data": category_data,
+ "relevant_links": {
+ link: value for link, value in zip(
+ article_result["metadata"].get("relevantlinks", []),
+ article_result["metadata"].get("relevantlinkvalues", [])
+ )
+ }
+ }
+ )
diff --git a/pydis_site/apps/content/views/articles.py b/pydis_site/apps/content/views/articles.py
new file mode 100644
index 00000000..ff945a19
--- /dev/null
+++ b/pydis_site/apps/content/views/articles.py
@@ -0,0 +1,14 @@
+from django.core.handlers.wsgi import WSGIRequest
+from django.http import HttpResponse
+from django.shortcuts import render
+from django.views import View
+
+from pydis_site.apps.content.utils import get_categories, get_articles
+
+
+class ArticlesView(View):
+ """Shows all content and categories."""
+
+ def get(self, request: WSGIRequest) -> HttpResponse:
+ """Shows all content and categories."""
+ return render(request, "content/articles.html", {"content": get_articles(), "categories": get_categories()})
diff --git a/pydis_site/apps/content/views/category.py b/pydis_site/apps/content/views/category.py
new file mode 100644
index 00000000..62e80a47
--- /dev/null
+++ b/pydis_site/apps/content/views/category.py
@@ -0,0 +1,18 @@
+from django.core.handlers.wsgi import WSGIRequest
+from django.http import HttpResponse
+from django.shortcuts import render
+from django.views import View
+
+from pydis_site.apps.content.utils import get_category, get_articles
+
+
+class CategoryView(View):
+ """Handles content category page."""
+
+ def get(self, request: WSGIRequest, category: str) -> HttpResponse:
+ """Handles page that displays category content."""
+ return render(
+ request,
+ "content/category.html",
+ {"category_info": get_category(category), "content": get_articles(category), "category_name": category}
+ )