Improve next_url and previous_url calculation

Instead of calculating these values in the dispatch
method, add new methods to calculate and insert the values of
next_url and previous_url in the context.

Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
This commit is contained in:
Roberto Rosario
2019-02-05 05:50:25 -04:00
parent a4ef6b3e8a
commit 8284dcf306

View File

@@ -374,31 +374,10 @@ class ObjectNameMixin(object):
class RedirectionMixin(object):
action_cancel_redirect = None
next_url = None
previous_url = None
post_action_redirect = None
def dispatch(self, request, *args, **kwargs):
post_action_redirect = self.get_post_action_redirect()
action_cancel_redirect = self.get_action_cancel_redirect()
self.next_url = self.request.POST.get(
'next', self.request.GET.get(
'next', post_action_redirect if post_action_redirect else self.request.META.get(
'HTTP_REFERER', reverse(setting_home_view.value)
)
)
)
self.previous_url = self.request.POST.get(
'previous', self.request.GET.get(
'previous', action_cancel_redirect if action_cancel_redirect else self.request.META.get(
'HTTP_REFERER', reverse(setting_home_view.value)
)
)
)
return super(
RedirectionMixin, self
).dispatch(request, *args, **kwargs)
def get_action_cancel_redirect(self):
return self.action_cancel_redirect
@@ -406,8 +385,8 @@ class RedirectionMixin(object):
context = super(RedirectionMixin, self).get_context_data(**kwargs)
context.update(
{
'next': self.next_url,
'previous': self.previous_url
'next': self.get_next_url(),
'previous': self.get_previous_url()
}
)
@@ -416,8 +395,36 @@ class RedirectionMixin(object):
def get_post_action_redirect(self):
return self.post_action_redirect
def get_next_url(self):
if self.next_url:
return self.next_url
else:
post_action_redirect = self.get_post_action_redirect()
return self.request.POST.get(
'next', self.request.GET.get(
'next', post_action_redirect if post_action_redirect else self.request.META.get(
'HTTP_REFERER', reverse(setting_home_view.value)
)
)
)
def get_previous_url(self):
if self.previous_url:
return self.previous_url
else:
action_cancel_redirect = self.get_action_cancel_redirect()
return self.request.POST.get(
'previous', self.request.GET.get(
'previous', action_cancel_redirect if action_cancel_redirect else self.request.META.get(
'HTTP_REFERER', reverse(setting_home_view.value)
)
)
)
def get_success_url(self):
return self.next_url or self.previous_url
return self.get_next_url() or self.get_previous_url()
class RestrictedQuerysetMixin(object):