diff options
author | 2019-04-19 11:36:40 +0100 | |
---|---|---|
committer | 2019-04-19 11:36:40 +0100 | |
commit | 5e76c9ade203830c7f9a904d049dd54299a215b1 (patch) | |
tree | 6c530ba0a639b5f8859f4716778e076f9fb4dc28 /pydis_site/apps | |
parent | Searching 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.py | 65 | ||||
-rw-r--r-- | pydis_site/apps/home/templatetags/wiki_extra.py | 4 |
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: |