aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site/apps
diff options
context:
space:
mode:
authorGravatar Gareth Coles <[email protected]>2019-04-19 11:36:40 +0100
committerGravatar Gareth Coles <[email protected]>2019-04-19 11:36:40 +0100
commit5e76c9ade203830c7f9a904d049dd54299a215b1 (patch)
tree6c530ba0a639b5f8859f4716778e076f9fb4dc28 /pydis_site/apps
parentSearching and pagination (diff)
Big pagination changes because the wiki is stupid
Diffstat (limited to 'pydis_site/apps')
-rw-r--r--pydis_site/apps/home/templatetags/extra_tags.py65
-rw-r--r--pydis_site/apps/home/templatetags/wiki_extra.py4
2 files changed, 67 insertions, 2 deletions
diff --git a/pydis_site/apps/home/templatetags/extra_tags.py b/pydis_site/apps/home/templatetags/extra_tags.py
new file mode 100644
index 00000000..a4da1742
--- /dev/null
+++ b/pydis_site/apps/home/templatetags/extra_tags.py
@@ -0,0 +1,65 @@
+from urllib.parse import urlparse, ParseResult, urlunparse
+
+from django.template import Context, Library
+from django.urls import resolve, reverse, NoReverseMatch
+
+register = Library()
+
+
[email protected]_tag(takes_context=True)
+def url_extend(context: Context, *args, **kwargs):
+ current_url = context["request"].get_full_path()
+ resolved = resolve(current_url)
+
+ url = resolved.url_name
+ app_name = resolved.app_name
+
+ try:
+ _args = resolved.args
+ _kwargs = resolved.kwargs.copy()
+
+ _args += args
+ _kwargs.update(kwargs)
+
+ if app_name:
+ pattern = f"{app_name}:{url}"
+ else:
+ pattern = url
+
+ return reverse(pattern, args=_args, kwargs=_kwargs)
+ except NoReverseMatch:
+ _args = resolved.args
+ _kwargs = resolved.kwargs.copy()
+
+ if app_name:
+ pattern = f"{app_name}:{url}"
+ else:
+ pattern = url
+
+ reversed_url = reverse(pattern, args=_args, kwargs=_kwargs)
+ parsed: ParseResult = urlparse(reversed_url)
+
+ params = parsed.params
+
+ if params:
+ params += f"&"
+ else:
+ params = "?"
+
+ params += "&".join(args)
+ kwarg_list = []
+
+ for key, value in kwargs.items():
+ kwarg_list.append(f"{key}={value}")
+
+ params += "&".join(kwarg_list)
+
+ parsed = ParseResult(
+ parsed.scheme, parsed.netloc, parsed.path,
+ "", parsed.query, parsed.fragment
+ )
+
+ unparsed = urlunparse(parsed) + params
+ print(parsed)
+ print(unparsed)
+ return unparsed
diff --git a/pydis_site/apps/home/templatetags/wiki_extra.py b/pydis_site/apps/home/templatetags/wiki_extra.py
index 63d9bade..58612cc8 100644
--- a/pydis_site/apps/home/templatetags/wiki_extra.py
+++ b/pydis_site/apps/home/templatetags/wiki_extra.py
@@ -6,7 +6,7 @@ from django.forms import (
EmailField, Field, FileField, FilePathField, FloatField, GenericIPAddressField, ImageField, IntegerField,
ModelChoiceField, ModelMultipleChoiceField, MultiValueField, MultipleChoiceField, NullBooleanField, RegexField,
SlugField, SplitDateTimeField, TimeField, TypedChoiceField, TypedMultipleChoiceField, URLField, UUIDField)
-from django.template import Template
+from django.template import Template, Context
from django.template.loader import get_template
from django.utils.safestring import mark_safe
from wiki.editors.markitup import MarkItUpWidget
@@ -86,7 +86,7 @@ def render_field(field: Field, render_labels: bool = True):
@register.simple_tag(takes_context=True)
-def get_field_options(context, field: BoundField):
+def get_field_options(context: Context, field: BoundField):
widget = field.field.widget
if field.value() is None: