The spec '<imagekit.specs.DynamicSpec object at 0x7efc7e43dcd0>' has no source file associated with it.
Request Method: | GET |
---|---|
Request URL: | http://gisd.org.ls/publications/ |
Django Version: | 4.0.4 |
Exception Type: | MissingSource |
Exception Value: | The spec '<imagekit.specs.DynamicSpec object at 0x7efc7e43dcd0>' has no source file associated with it. |
Exception Location: | /apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/imagekit/specs/__init__.py, line 143, in generate |
Python Executable: | /apps/gisd_v2_website/gisdv2/env/bin/python3 |
Python Version: | 3.8.10 |
Python Path: | ['/apps/gisd_v2_website/gisdv2/gisd', '/apps/gisd_v2_website/gisdv2/env/bin', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages'] |
Server time: | Fri, 29 Mar 2024 13:09:08 +0200 |
In template /apps/gisd_v2_website/gisdv2/gisd/templates/pages/publications.html
, error at line 66
56 | |
---|---|
57 | </div> |
58 | <div class="mt-10 container mx-auto w-3/5"> |
59 | <div class="grid grid-cols-1 md:grid-cols-3 gap-5 md:gap-28"> |
60 | {% for publication in publications %} |
61 | <a href="{{publication.get_absolute_url}}" class=""> |
62 | <div class="flex flex-col space-x-0 md:space-x-2 space-y-5 cursor-pointer"> |
63 | <div class='card-shadow rounded-xl text-center '> |
64 | <div class="h-72"> |
65 | <img class="h-full w-full object-cover rounded-md" |
66 | src="{{publication.photo_main_story.url}}" alt=""> |
67 | </div> |
68 | </div> |
69 | <!-- category --> |
70 | <div class="text-center"> |
71 | <p class="text-slate-500 italic font-medium capitalize">{{publication.category}}</p> |
72 | </div> |
73 | <h1 class="text-cyan-800 font-semibold text-2xl leading-none">{{publication}} |
74 | </h1> |
75 | </div> |
76 | </a> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/template/base.py
, line 875, in _resolve_lookup
detail and shouldn't be called by external code. Use Variable.resolve()
instead.
"""
current = context
try: # catch-all for silent variable failures
for bit in self.lookups:
try: # dictionary lookup
current = current[bit]…
# ValueError/IndexError are for numpy.array lookup on
# numpy < 1.9 and 1.9+ respectively
except (TypeError, AttributeError, KeyError, ValueError, IndexError):
try: # attribute lookup
# Don't return class attributes if the class is the context:
if isinstance(current, BaseContext) and getattr(
Variable | Value |
---|---|
bit | 'url' |
context | [{'True': True, 'False': False, 'None': None}, {}, {}, {'hero_banner': <Hero: Publication>, 'publications': <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]>}] |
current | <ImageCacheFile: None> |
self | <Variable: 'publication.photo_main_story.url'> |
template_name | 'pages/publications.html' |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/core/handlers/exception.py
, line 55, in inner
return inner
else:
@wraps(get_response)
def inner(request):
try:
response = get_response(request)…
except Exception as exc:
response = response_for_exception(request, exc)
return response
return inner
Variable | Value |
---|---|
exc | MissingSource("The spec '<imagekit.specs.DynamicSpec object at 0x7efc7e43dcd0>' has no source file associated with it.") |
get_response | <bound method BaseHandler._get_response of <django.core.handlers.wsgi.WSGIHandler object at 0x7efc812d4460>> |
request | <WSGIRequest: GET '/publications/'> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/core/handlers/base.py
, line 197, in _get_response
if response is None:
wrapped_callback = self.make_view_atomic(callback)
# If it is an asynchronous view, run it in a subthread.
if asyncio.iscoroutinefunction(wrapped_callback):
wrapped_callback = async_to_sync(wrapped_callback)
try:
response = wrapped_callback(request, *callback_args, **callback_kwargs)…
except Exception as e:
response = self.process_exception_by_middleware(e, request)
if response is None:
raise
# Complain if the view returned None (a common error).
Variable | Value |
---|---|
callback | <function View.as_view.<locals>.view at 0x7efc7eb3f160> |
callback_args | () |
callback_kwargs | {} |
middleware_method | <bound method CsrfViewMiddleware.process_view of <CsrfViewMiddleware get_response=convert_exception_to_response.<locals>.inner>> |
request | <WSGIRequest: GET '/publications/'> |
response | None |
self | <django.core.handlers.wsgi.WSGIHandler object at 0x7efc812d4460> |
wrapped_callback | <function View.as_view.<locals>.view at 0x7efc7eb3f160> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/views/generic/base.py
, line 84, in view
self = cls(**initkwargs)
self.setup(request, *args, **kwargs)
if not hasattr(self, "request"):
raise AttributeError(
"%s instance has no 'request' attribute. Did you override "
"setup() and forget to call super()?" % cls.__name__
)
return self.dispatch(request, *args, **kwargs)…
view.view_class = cls
view.view_initkwargs = initkwargs
# __name__ and __qualname__ are intentionally left unchanged as
# view_class should be used to robustly determine the name of the view
Variable | Value |
---|---|
args | () |
cls | <class 'website.views.PublicationListing'> |
initkwargs | {} |
kwargs | {} |
request | <WSGIRequest: GET '/publications/'> |
self | <website.views.PublicationListing object at 0x7efc7e5b5fa0> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/views/generic/base.py
, line 119, in dispatch
# request method isn't on the approved list.
if request.method.lower() in self.http_method_names:
handler = getattr(
self, request.method.lower(), self.http_method_not_allowed
)
else:
handler = self.http_method_not_allowed
return handler(request, *args, **kwargs)…
def http_method_not_allowed(self, request, *args, **kwargs):
logger.warning(
"Method Not Allowed (%s): %s",
request.method,
request.path,
Variable | Value |
---|---|
args | () |
handler | <bound method PublicationListing.get of <website.views.PublicationListing object at 0x7efc7e5b5fa0>> |
kwargs | {} |
request | <WSGIRequest: GET '/publications/'> |
self | <website.views.PublicationListing object at 0x7efc7e5b5fa0> |
/apps/gisd_v2_website/gisdv2/gisd/website/views.py
, line 146, in get
def get(self, request, *args, **kwargs):
hero_banner = Hero.objects.filter(category__name="Publication").first()
publications = Publication.objects.all()
context = {
"hero_banner": hero_banner,
"publications": publications,
}
return render(request, 'pages/publications.html', context)…
class PublicationDetail(View):
def get(self, request, *args, **kwargs):
publications = get_object_or_404(Publication, slug=self.kwargs["slug"])
context = {
Variable | Value |
---|---|
args | () |
context | {'hero_banner': <Hero: Publication>, 'publications': <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]>} |
hero_banner | <Hero: Publication> |
kwargs | {} |
publications | <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]> |
request | <WSGIRequest: GET '/publications/'> |
self | <website.views.PublicationListing object at 0x7efc7e5b5fa0> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/shortcuts.py
, line 24, in render
def render(
request, template_name, context=None, content_type=None, status=None, using=None
):
"""
Return an HttpResponse whose content is filled with the result of calling
django.template.loader.render_to_string() with the passed arguments.
"""
content = loader.render_to_string(template_name, context, request, using=using)…
return HttpResponse(content, content_type, status)
def redirect(to, *args, permanent=False, **kwargs):
"""
Return an HttpResponseRedirect to the appropriate URL for the arguments
Variable | Value |
---|---|
content_type | None |
context | {'hero_banner': <Hero: Publication>, 'publications': <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]>} |
request | <WSGIRequest: GET '/publications/'> |
status | None |
template_name | 'pages/publications.html' |
using | None |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/template/loader.py
, line 62, in render_to_string
template_name may be a string or a list of strings.
"""
if isinstance(template_name, (list, tuple)):
template = select_template(template_name, using=using)
else:
template = get_template(template_name, using=using)
return template.render(context, request)…
def _engine_list(using=None):
return engines.all() if using is None else [engines[using]]
Variable | Value |
---|---|
context | {'hero_banner': <Hero: Publication>, 'publications': <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]>} |
request | <WSGIRequest: GET '/publications/'> |
template | <django.template.backends.django.Template object at 0x7efc7df8cfd0> |
template_name | 'pages/publications.html' |
using | None |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/template/backends/django.py
, line 62, in render
return self.template.origin
def render(self, context=None, request=None):
context = make_context(
context, request, autoescape=self.backend.engine.autoescape
)
try:
return self.template.render(context)…
except TemplateDoesNotExist as exc:
reraise(exc, self.backend)
def copy_exception(exc, backend=None):
"""
Variable | Value |
---|---|
context | [{'True': True, 'False': False, 'None': None}, {}, {}, {'hero_banner': <Hero: Publication>, 'publications': <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]>}] |
request | <WSGIRequest: GET '/publications/'> |
self | <django.template.backends.django.Template object at 0x7efc7df8cfd0> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/template/base.py
, line 175, in render
def render(self, context):
"Display stage -- can be called many times"
with context.render_context.push_state(self):
if context.template is None:
with context.bind_template(self):
context.template_name = self.name
return self._render(context)…
else:
return self._render(context)
def compile_nodelist(self):
"""
Parse and compile the template source into a nodelist. If debug
Variable | Value |
---|---|
context | [{'True': True, 'False': False, 'None': None}, {}, {}, {'hero_banner': <Hero: Publication>, 'publications': <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]>}] |
self | <Template template_string="{% extends 'base.htm..."> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/template/base.py
, line 167, in _render
def __repr__(self):
return '<%s template_string="%s...">' % (
self.__class__.__qualname__,
self.source[:20].replace("\n", ""),
)
def _render(self, context):
return self.nodelist.render(context)…
def render(self, context):
"Display stage -- can be called many times"
with context.render_context.push_state(self):
if context.template is None:
with context.bind_template(self):
Variable | Value |
---|---|
context | [{'True': True, 'False': False, 'None': None}, {}, {}, {'hero_banner': <Hero: Publication>, 'publications': <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]>}] |
self | <Template template_string="{% extends 'base.htm..."> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/template/base.py
, line 1000, in render
class NodeList(list):
# Set to True the first time a non-TextNode is inserted by
# extend_nodelist().
contains_nontext = False
def render(self, context):
return SafeString("".join([node.render_annotated(context) for node in self]))…
def get_nodes_by_type(self, nodetype):
"Return a list of all nodes of the given type"
nodes = []
for node in self:
nodes.extend(node.get_nodes_by_type(nodetype))
Variable | Value |
---|---|
context | [{'True': True, 'False': False, 'None': None}, {}, {}, {'hero_banner': <Hero: Publication>, 'publications': <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]>}] |
self | [<ExtendsNode: extends 'base.html'>] |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/template/base.py
, line 1000, in <listcomp>
class NodeList(list):
# Set to True the first time a non-TextNode is inserted by
# extend_nodelist().
contains_nontext = False
def render(self, context):
return SafeString("".join([node.render_annotated(context) for node in self]))…
def get_nodes_by_type(self, nodetype):
"Return a list of all nodes of the given type"
nodes = []
for node in self:
nodes.extend(node.get_nodes_by_type(nodetype))
Variable | Value |
---|---|
.0 | <list_iterator object at 0x7efc7e461430> |
context | [{'True': True, 'False': False, 'None': None}, {}, {}, {'hero_banner': <Hero: Publication>, 'publications': <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]>}] |
node | <ExtendsNode: extends 'base.html'> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/template/base.py
, line 958, in render_annotated
"""
Render the node. If debug is True and an exception occurs during
rendering, the exception is annotated with contextual line information
where it occurred in the template. For internal usage this method is
preferred over using the render method directly.
"""
try:
return self.render(context)…
except Exception as e:
if context.template.engine.debug:
# Store the actual node that caused the exception.
if not hasattr(e, "_culprit_node"):
e._culprit_node = self
if (
Variable | Value |
---|---|
context | [{'True': True, 'False': False, 'None': None}, {}, {}, {'hero_banner': <Hero: Publication>, 'publications': <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]>}] |
self | <ExtendsNode: extends 'base.html'> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/template/loader_tags.py
, line 157, in render
}
block_context.add_blocks(blocks)
break
# Call Template._render explicitly so the parser context stays
# the same.
with context.render_context.push_state(compiled_parent, isolated_context=False):
return compiled_parent._render(context)…
class IncludeNode(Node):
context_key = "__include_context"
def __init__(
Variable | Value |
---|---|
block_context | <BlockContext: blocks=defaultdict(<class 'list'>, {'extra_styles': [<Block Node: extra_styles. Contents: []>, <Block Node: extra_styles. Contents: [<TextNode: '\n<style>\n .bg-svg {\n\n '>]>], 'main_content': [<Block Node: main_content. Contents: [<TextNode: '\n '>]>], 'extra_script': [<Block Node: extra_script. Contents: [<TextNode: '\n '>]>]})> |
blocks | {'extra_script': <Block Node: extra_script. Contents: [<TextNode: '\n '>]>, 'extra_styles': <Block Node: extra_styles. Contents: []>, 'main_content': <Block Node: main_content. Contents: [<TextNode: '\n '>]>} |
compiled_parent | <Template template_string="{% load static %}<..."> |
context | [{'True': True, 'False': False, 'None': None}, {}, {}, {'hero_banner': <Hero: Publication>, 'publications': <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]>}] |
node | <django.template.defaulttags.LoadNode object at 0x7efc7e52da60> |
self | <ExtendsNode: extends 'base.html'> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/template/base.py
, line 167, in _render
def __repr__(self):
return '<%s template_string="%s...">' % (
self.__class__.__qualname__,
self.source[:20].replace("\n", ""),
)
def _render(self, context):
return self.nodelist.render(context)…
def render(self, context):
"Display stage -- can be called many times"
with context.render_context.push_state(self):
if context.template is None:
with context.bind_template(self):
Variable | Value |
---|---|
context | [{'True': True, 'False': False, 'None': None}, {}, {}, {'hero_banner': <Hero: Publication>, 'publications': <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]>}] |
self | <Template template_string="{% load static %}<..."> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/template/base.py
, line 1000, in render
class NodeList(list):
# Set to True the first time a non-TextNode is inserted by
# extend_nodelist().
contains_nontext = False
def render(self, context):
return SafeString("".join([node.render_annotated(context) for node in self]))…
def get_nodes_by_type(self, nodetype):
"Return a list of all nodes of the given type"
nodes = []
for node in self:
nodes.extend(node.get_nodes_by_type(nodetype))
Variable | Value |
---|---|
context | [{'True': True, 'False': False, 'None': None}, {}, {}, {'hero_banner': <Hero: Publication>, 'publications': <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]>}] |
self | [<django.template.defaulttags.LoadNode object at 0x7efc7e52da60>, <TextNode: '\n\n<!DOCTYPE html>\n<html l'>, StaticNode(varname=None, path=<FilterExpression "'images/favicon.ico'">), <TextNode: '">\n <link href="https:'>, <Block Node: extra_styles. Contents: []>, <TextNode: '\n</head>\n\n<body class="an'>, <URLNode view_name=''news'' args=[] kwargs={} as=None>, <TextNode: '">News</a>\n '>, <URLNode view_name=''publications'' args=[] kwargs={} as=None>, <TextNode: '">Publications</a>\n '>, <URLNode view_name=''reforms'' args=[] kwargs={} as=None>, <TextNode: '">National Reforms</a>\n\n\n'>, StaticNode(varname=None, path=<FilterExpression "'images/new-logo.png'">), <TextNode: '" alt=""\n '>, <WithNode>, <TextNode: '\n </na'>, <Block Node: main_content. Contents: [<TextNode: '\n '>]>, <TextNode: '\n <!-- FOOTER -->\n '>, StaticNode(varname=None, path=<FilterExpression "'images/new-logo.png'">), <TextNode: '" alt="" srcset="">\n '>, <IfNode>, <TextNode: '\n </ul'>, <ForNode: for events in events, tail_len: 5>, <TextNode: '\n </ul'>, <Block Node: extra_script. Contents: [<TextNode: '\n '>]>, <TextNode: '\n</body>\n\n</html>'>] |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/template/base.py
, line 1000, in <listcomp>
class NodeList(list):
# Set to True the first time a non-TextNode is inserted by
# extend_nodelist().
contains_nontext = False
def render(self, context):
return SafeString("".join([node.render_annotated(context) for node in self]))…
def get_nodes_by_type(self, nodetype):
"Return a list of all nodes of the given type"
nodes = []
for node in self:
nodes.extend(node.get_nodes_by_type(nodetype))
Variable | Value |
---|---|
.0 | <list_iterator object at 0x7efc7ddb0100> |
context | [{'True': True, 'False': False, 'None': None}, {}, {}, {'hero_banner': <Hero: Publication>, 'publications': <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]>}] |
node | <Block Node: main_content. Contents: [<TextNode: '\n '>]> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/template/base.py
, line 958, in render_annotated
"""
Render the node. If debug is True and an exception occurs during
rendering, the exception is annotated with contextual line information
where it occurred in the template. For internal usage this method is
preferred over using the render method directly.
"""
try:
return self.render(context)…
except Exception as e:
if context.template.engine.debug:
# Store the actual node that caused the exception.
if not hasattr(e, "_culprit_node"):
e._culprit_node = self
if (
Variable | Value |
---|---|
context | [{'True': True, 'False': False, 'None': None}, {}, {}, {'hero_banner': <Hero: Publication>, 'publications': <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]>}] |
self | <Block Node: main_content. Contents: [<TextNode: '\n '>]> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/template/loader_tags.py
, line 63, in render
push = block = block_context.pop(self.name)
if block is None:
block = self
# Create new block so we can store context without thread-safety issues.
block = type(self)(block.name, block.nodelist)
block.context = context
context["block"] = block
result = block.nodelist.render(context)…
if push is not None:
block_context.push(self.name, push)
return result
def super(self):
if not hasattr(self, "context"):
Variable | Value |
---|---|
block | <Block Node: main_content. Contents: [<TextNode: '\n<!-- HERO BG AND TYPED J'>, <IfNode>, <TextNode: '\n<!-- HERO BG AND TYPED J'>, <ForNode: for publication in publications, tail_len: 9>, <TextNode: '\n </div>\n '>]> |
block_context | <BlockContext: blocks=defaultdict(<class 'list'>, {'extra_styles': [<Block Node: extra_styles. Contents: []>, <Block Node: extra_styles. Contents: [<TextNode: '\n<style>\n .bg-svg {\n\n '>]>], 'main_content': [<Block Node: main_content. Contents: [<TextNode: '\n '>]>], 'extra_script': [<Block Node: extra_script. Contents: [<TextNode: '\n '>]>]})> |
context | [{'True': True, 'False': False, 'None': None}, {}, {}, {'hero_banner': <Hero: Publication>, 'publications': <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]>}] |
push | <Block Node: main_content. Contents: [<TextNode: '\n<!-- HERO BG AND TYPED J'>, <IfNode>, <TextNode: '\n<!-- HERO BG AND TYPED J'>, <ForNode: for publication in publications, tail_len: 9>, <TextNode: '\n </div>\n '>]> |
self | <Block Node: main_content. Contents: [<TextNode: '\n '>]> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/template/base.py
, line 1000, in render
class NodeList(list):
# Set to True the first time a non-TextNode is inserted by
# extend_nodelist().
contains_nontext = False
def render(self, context):
return SafeString("".join([node.render_annotated(context) for node in self]))…
def get_nodes_by_type(self, nodetype):
"Return a list of all nodes of the given type"
nodes = []
for node in self:
nodes.extend(node.get_nodes_by_type(nodetype))
Variable | Value |
---|---|
context | [{'True': True, 'False': False, 'None': None}, {}, {}, {'hero_banner': <Hero: Publication>, 'publications': <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]>}] |
self | [<TextNode: '\n<!-- HERO BG AND TYPED J'>, <IfNode>, <TextNode: '\n<!-- HERO BG AND TYPED J'>, <ForNode: for publication in publications, tail_len: 9>, <TextNode: '\n </div>\n '>] |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/template/base.py
, line 1000, in <listcomp>
class NodeList(list):
# Set to True the first time a non-TextNode is inserted by
# extend_nodelist().
contains_nontext = False
def render(self, context):
return SafeString("".join([node.render_annotated(context) for node in self]))…
def get_nodes_by_type(self, nodetype):
"Return a list of all nodes of the given type"
nodes = []
for node in self:
nodes.extend(node.get_nodes_by_type(nodetype))
Variable | Value |
---|---|
.0 | <list_iterator object at 0x7efc7e674bb0> |
context | [{'True': True, 'False': False, 'None': None}, {}, {}, {'hero_banner': <Hero: Publication>, 'publications': <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]>}] |
node | <ForNode: for publication in publications, tail_len: 9> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/template/base.py
, line 958, in render_annotated
"""
Render the node. If debug is True and an exception occurs during
rendering, the exception is annotated with contextual line information
where it occurred in the template. For internal usage this method is
preferred over using the render method directly.
"""
try:
return self.render(context)…
except Exception as e:
if context.template.engine.debug:
# Store the actual node that caused the exception.
if not hasattr(e, "_culprit_node"):
e._culprit_node = self
if (
Variable | Value |
---|---|
context | [{'True': True, 'False': False, 'None': None}, {}, {}, {'hero_banner': <Hero: Publication>, 'publications': <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]>}] |
self | <ForNode: for publication in publications, tail_len: 9> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/template/defaulttags.py
, line 238, in render
unpacked_vars = dict(zip(self.loopvars, item))
pop_context = True
context.update(unpacked_vars)
else:
context[self.loopvars[0]] = item
for node in self.nodelist_loop:
nodelist.append(node.render_annotated(context))…
if pop_context:
# Pop the loop variables pushed on to the context to avoid
# the context ending up in an inconsistent state when other
# tags (e.g., include and with) push data to context.
context.pop()
Variable | Value |
---|---|
context | [{'True': True, 'False': False, 'None': None}, {}, {}, {'hero_banner': <Hero: Publication>, 'publications': <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]>}] |
i | 3 |
item | <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities> |
len_values | 4 |
loop_dict | {'counter': 4, 'counter0': 3, 'first': False, 'last': True, 'parentloop': {}, 'revcounter': 1, 'revcounter0': 0} |
node | <Variable Node: publication.photo_main_story.url> |
nodelist | ['\n <a href="', '/publications/lesotho-civil-society-submission-to-the-aprm/', '" class="">\n' ' <div class="flex flex-col space-x-0 md:space-x-2 ' 'space-y-5 cursor-pointer">\n' " <div class='card-shadow rounded-xl text-center " "'>\n" ' <div class="h-72">\n' ' <img class="h-full w-full object-cover ' 'rounded-md"\n' ' src="', '/media/CACHE/images/publication/images/Publication_1_-_CSO_submissions_/ca51ab5b15adfee1bc5cf62e30cc45e8.jpg', '" alt="">\n' ' </div>\n' ' </div>\n' ' <!-- category -->\n' ' <div class="text-center">\n' ' <p class="text-slate-500 italic font-medium ' 'capitalize">', 'report', '</p>\n' ' </div>\n' ' <h1 class="text-cyan-800 font-semibold text-2xl ' 'leading-none">', 'Lesotho Civil Society - Submission to the APRM', '\n' ' </h1>\n' ' </div>\n' ' </a>\n' ' ', '\n <a href="', '/publications/implementing-the-aprm-views-from-the-civil-society/', '" class="">\n' ' <div class="flex flex-col space-x-0 md:space-x-2 ' 'space-y-5 cursor-pointer">\n' " <div class='card-shadow rounded-xl text-center " "'>\n" ' <div class="h-72">\n' ' <img class="h-full w-full object-cover ' 'rounded-md"\n' ' src="', '/media/CACHE/images/publication/images/Implementing_Lesotho_APRM_-_Civil_Society_Views/0fc53f645c9aece18cf1466300a5879f.jpg', '" alt="">\n' ' </div>\n' ' </div>\n' ' <!-- category -->\n' ' <div class="text-center">\n' ' <p class="text-slate-500 italic font-medium ' 'capitalize">', 'report', '</p>\n' ' </div>\n' ' <h1 class="text-cyan-800 font-semibold text-2xl ' 'leading-none">', 'Implementing the APRM - Views from the Civil Society', '\n' ' </h1>\n' ' </div>\n' ' </a>\n' ' ', '\n <a href="', '/publications/lesothos-african-peer-review-mechanism-country-review-report-no-12/', '" class="">\n' ' <div class="flex flex-col space-x-0 md:space-x-2 ' 'space-y-5 cursor-pointer">\n' " <div class='card-shadow rounded-xl text-center " "'>\n" ' <div class="h-72">\n' ' <img class="h-full w-full object-cover ' 'rounded-md"\n' ' src="', '/media/CACHE/images/publication/images/LESOTHO_COUNTRY_REVIEW_REPORT.2010pdf/22aedc819e754b1008df9f9b40f85015.jpg', '" alt="">\n' ' </div>\n' ' </div>\n' ' <!-- category -->\n' ' <div class="text-center">\n' ' <p class="text-slate-500 italic font-medium ' 'capitalize">', 'report', '</p>\n' ' </div>\n' ' <h1 class="text-cyan-800 font-semibold text-2xl ' 'leading-none">', 'Lesotho’s African Peer Review Mechanism Country Review Report No. 12', '\n' ' </h1>\n' ' </div>\n' ' </a>\n' ' ', '\n <a href="', '/publications/press-freedom-in-30-years-tracking-progress-challenges-and-opportunities/', '" class="">\n' ' <di… <trimmed 4465 bytes string> |
num_loopvars | 1 |
parentloop | {} |
pop_context | False |
self | <ForNode: for publication in publications, tail_len: 9> |
unpack | False |
values | <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/template/base.py
, line 958, in render_annotated
"""
Render the node. If debug is True and an exception occurs during
rendering, the exception is annotated with contextual line information
where it occurred in the template. For internal usage this method is
preferred over using the render method directly.
"""
try:
return self.render(context)…
except Exception as e:
if context.template.engine.debug:
# Store the actual node that caused the exception.
if not hasattr(e, "_culprit_node"):
e._culprit_node = self
if (
Variable | Value |
---|---|
context | [{'True': True, 'False': False, 'None': None}, {}, {}, {'hero_banner': <Hero: Publication>, 'publications': <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]>}] |
self | <Variable Node: publication.photo_main_story.url> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/template/base.py
, line 1059, in render
self.filter_expression = filter_expression
def __repr__(self):
return "<Variable Node: %s>" % self.filter_expression
def render(self, context):
try:
output = self.filter_expression.resolve(context)…
except UnicodeDecodeError:
# Unicode conversion can fail sometimes for reasons out of our
# control (e.g. exception rendering). In that case, we fail
# quietly.
return ""
return render_value_in_context(output, context)
Variable | Value |
---|---|
context | [{'True': True, 'False': False, 'None': None}, {}, {}, {'hero_banner': <Hero: Publication>, 'publications': <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]>}] |
self | <Variable Node: publication.photo_main_story.url> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/template/base.py
, line 712, in resolve
self.filters = filters
self.var = var_obj
def resolve(self, context, ignore_failures=False):
if isinstance(self.var, Variable):
try:
obj = self.var.resolve(context)…
except VariableDoesNotExist:
if ignore_failures:
obj = None
else:
string_if_invalid = context.template.engine.string_if_invalid
if string_if_invalid:
Variable | Value |
---|---|
context | [{'True': True, 'False': False, 'None': None}, {}, {}, {'hero_banner': <Hero: Publication>, 'publications': <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]>}] |
ignore_failures | False |
self | <FilterExpression 'publication.photo_main_story.url'> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/template/base.py
, line 842, in resolve
)
self.lookups = tuple(var.split(VARIABLE_ATTRIBUTE_SEPARATOR))
def resolve(self, context):
"""Resolve this variable against a given context."""
if self.lookups is not None:
# We're dealing with a variable that needs to be resolved
value = self._resolve_lookup(context)…
else:
# We're dealing with a literal, so it's already been "resolved"
value = self.literal
if self.translate:
is_safe = isinstance(value, SafeData)
msgid = value.replace("%", "%%")
Variable | Value |
---|---|
context | [{'True': True, 'False': False, 'None': None}, {}, {}, {'hero_banner': <Hero: Publication>, 'publications': <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]>}] |
self | <Variable: 'publication.photo_main_story.url'> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/template/base.py
, line 885, in _resolve_lookup
except (TypeError, AttributeError, KeyError, ValueError, IndexError):
try: # attribute lookup
# Don't return class attributes if the class is the context:
if isinstance(current, BaseContext) and getattr(
type(current), bit
):
raise AttributeError
current = getattr(current, bit)…
except (TypeError, AttributeError):
# Reraise if the exception was raised by a @property
if not isinstance(current, BaseContext) and bit in dir(current):
raise
try: # list-index lookup
current = current[int(bit)]
Variable | Value |
---|---|
bit | 'url' |
context | [{'True': True, 'False': False, 'None': None}, {}, {}, {'hero_banner': <Hero: Publication>, 'publications': <QuerySet [<Publication: Lesotho Civil Society - Submission to the APRM>, <Publication: Implementing the APRM - Views from the Civil Society>, <Publication: Lesotho’s African Peer Review Mechanism Country Review Report No. 12>, <Publication: Press Freedom in 30 years: Tracking progress, challenges and opportunities>]>}] |
current | <ImageCacheFile: None> |
self | <Variable: 'publication.photo_main_story.url'> |
template_name | 'pages/publications.html' |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/imagekit/cachefiles/__init__.py
, line 85, in url
@property
def path(self):
return self._storage_attr('path')
@property
def url(self):
return self._storage_attr('url')…
def generate(self, force=False):
"""
Generate the file. If ``force`` is ``True``, the file will be generated
whether the file already exists or not.
Variable | Value |
---|---|
self | <ImageCacheFile: None> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/imagekit/cachefiles/__init__.py
, line 75, in _storage_attr
# require the file to exist; they do not need its contents to work. This
# distinction gives the user the flexibility to create a cache file
# strategy that assumes the existence of a file, but can still make the file
# available when its contents are required.
def _storage_attr(self, attr):
if getattr(self, '_file', None) is None:
existence_required.send(sender=self, file=self)…
fn = getattr(self.storage, attr)
return fn(self.name)
@property
def path(self):
return self._storage_attr('path')
Variable | Value |
---|---|
attr | 'url' |
self | <ImageCacheFile: None> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/dispatch/dispatcher.py
, line 176, in send
"""
if (
not self.receivers
or self.sender_receivers_cache.get(sender) is NO_RECEIVERS
):
return []
return […
(receiver, receiver(signal=self, sender=sender, **named))
for receiver in self._live_receivers(sender)
]
def send_robust(self, sender, **named):
"""
Variable | Value |
---|---|
named | {'file': <ImageCacheFile: None>} |
self | <django.dispatch.dispatcher.Signal object at 0x7efc8105c520> |
sender | <ImageCacheFile: None> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/django/dispatch/dispatcher.py
, line 177, in <listcomp>
if (
not self.receivers
or self.sender_receivers_cache.get(sender) is NO_RECEIVERS
):
return []
return [
(receiver, receiver(signal=self, sender=sender, **named))…
for receiver in self._live_receivers(sender)
]
def send_robust(self, sender, **named):
"""
Send signal from sender to all connected receivers catching errors.
Variable | Value |
---|---|
.0 | <list_iterator object at 0x7efc7e43dd60> |
named | {'file': <ImageCacheFile: None>} |
receiver | <bound method GeneratorRegistry.existence_required_receiver of <imagekit.registry.GeneratorRegistry object at 0x7efc8105c250>> |
self | <django.dispatch.dispatcher.Signal object at 0x7efc8105c520> |
sender | <ImageCacheFile: None> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/imagekit/registry.py
, line 53, in existence_required_receiver
autodiscover()
return self._generators.keys()
def content_required_receiver(self, sender, file, **kwargs):
self._receive(file, 'on_content_required')
def existence_required_receiver(self, sender, file, **kwargs):
self._receive(file, 'on_existence_required')…
def _receive(self, file, callback):
generator = file.generator
# FIXME: I guess this means you can't register functions?
if generator.__class__ in self._generators.values():
Variable | Value |
---|---|
file | <ImageCacheFile: None> |
kwargs | {'signal': <django.dispatch.dispatcher.Signal object at 0x7efc8105c520>} |
self | <imagekit.registry.GeneratorRegistry object at 0x7efc8105c250> |
sender | <ImageCacheFile: None> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/imagekit/registry.py
, line 61, in _receive
def _receive(self, file, callback):
generator = file.generator
# FIXME: I guess this means you can't register functions?
if generator.__class__ in self._generators.values():
# Only invoke the strategy method for registered generators.
call_strategy_method(file, callback)…
class SourceGroupRegistry(object):
"""
The source group registry is responsible for listening to source_* signals
on source groups, and relaying them to the image generated file strategies
Variable | Value |
---|---|
callback | 'on_existence_required' |
file | <ImageCacheFile: None> |
generator | <imagekit.specs.DynamicSpec object at 0x7efc7e43dcd0> |
self | <imagekit.registry.GeneratorRegistry object at 0x7efc8105c250> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/imagekit/utils.py
, line 166, in call_strategy_method
return f
def call_strategy_method(file, method_name):
strategy = getattr(file, 'cachefile_strategy', None)
fn = getattr(strategy, method_name, None)
if fn is not None:
fn(file)…
def get_cache():
try:
from django.core.cache import caches
except ImportError:
Variable | Value |
---|---|
file | <ImageCacheFile: None> |
fn | <bound method JustInTime.on_existence_required of <imagekit.cachefiles.strategies.JustInTime object at 0x7efc7e6801f0>> |
method_name | 'on_existence_required' |
strategy | <imagekit.cachefiles.strategies.JustInTime object at 0x7efc7e6801f0> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/imagekit/cachefiles/strategies.py
, line 15, in on_existence_required
class JustInTime(object):
"""
A strategy that ensures the file exists right before it's needed.
"""
def on_existence_required(self, file):
file.generate()…
def on_content_required(self, file):
file.generate()
class Optimistic(object):
Variable | Value |
---|---|
file | <ImageCacheFile: None> |
self | <imagekit.cachefiles.strategies.JustInTime object at 0x7efc7e6801f0> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/imagekit/cachefiles/__init__.py
, line 94, in generate
def generate(self, force=False):
"""
Generate the file. If ``force`` is ``True``, the file will be generated
whether the file already exists or not.
"""
if force or getattr(self, '_file', None) is None:
self.cachefile_backend.generate(self, force)…
def _generate(self):
# Generate the file
content = generate(self.generator)
actual_name = self.storage.save(self.name, content)
Variable | Value |
---|---|
force | False |
self | <ImageCacheFile: None> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/imagekit/cachefiles/backends.py
, line 109, in generate
"""
The most basic file backend. The storage is consulted to see if the file
exists. Files are generated synchronously.
"""
def generate(self, file, force=False):
self.generate_now(file, force=force)…
def _exists(self, file):
return bool(getattr(file, '_file', None)
or (file.name and file.storage.exists(file.name)))
Variable | Value |
---|---|
file | <ImageCacheFile: None> |
force | False |
self | <imagekit.cachefiles.backends.Simple object at 0x7efc7e674370> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/imagekit/cachefiles/backends.py
, line 96, in generate_now
def generate(self, file, force=False):
raise NotImplementedError
def generate_now(self, file, force=False):
if force or self.get_state(file) not in (CacheFileState.GENERATING, CacheFileState.EXISTS):
self.set_state(file, CacheFileState.GENERATING)
file._generate()…
self.set_state(file, CacheFileState.EXISTS)
file.close()
class Simple(CachedFileBackend):
"""
Variable | Value |
---|---|
file | <ImageCacheFile: None> |
force | False |
self | <imagekit.cachefiles.backends.Simple object at 0x7efc7e674370> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/imagekit/cachefiles/__init__.py
, line 98, in _generate
"""
if force or getattr(self, '_file', None) is None:
self.cachefile_backend.generate(self, force)
def _generate(self):
# Generate the file
content = generate(self.generator)…
actual_name = self.storage.save(self.name, content)
# We're going to reuse the generated file, so we need to reset the pointer.
content.seek(0)
Variable | Value |
---|---|
self | <ImageCacheFile: None> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/imagekit/utils.py
, line 152, in generate
def generate(generator):
"""
Calls the ``generate()`` method of a generator instance, and then wraps the
result in a Django File object so Django knows how to save it.
"""
content = generator.generate()…
f = File(content)
# The size of the File must be known or Django will try to open a file
# without a name and raise an Exception.
f.size = len(content.read())
# After getting the size reset the file pointer for future reads.
content.seek(0)
Variable | Value |
---|---|
generator | <imagekit.specs.DynamicSpec object at 0x7efc7e43dcd0> |
/apps/gisd_v2_website/gisdv2/env/lib/python3.8/site-packages/imagekit/specs/__init__.py
, line 143, in generate
self.format,
self.options,
self.autoconvert,
])
def generate(self):
if not self.source:
raise MissingSource("The spec '%s' has no source file associated"…
" with it." % self)
# TODO: Move into a generator base class
# TODO: Factor out a generate_image function so you can create a generator and only override the PIL.Image creating part. (The tricky part is how to deal with original_format since generator base class won't have one.)
closed = self.source.closed
Variable | Value |
---|---|
self | <imagekit.specs.DynamicSpec object at 0x7efc7e43dcd0> |
AnonymousUser
No GET data
No POST data
No FILES data
No cookie data
Variable | Value |
---|---|
HTTP_ACCEPT | '*/*' |
HTTP_CONNECTION | 'close' |
HTTP_HOST | 'gisd.org.ls' |
HTTP_USER_AGENT | 'claudebot' |
HTTP_X_FORWARDED_FOR | '44.197.116.176' |
PATH_INFO | '/publications/' |
QUERY_STRING | '' |
RAW_URI | '/publications/' |
REMOTE_ADDR | '' |
REQUEST_METHOD | 'GET' |
SCRIPT_NAME | '' |
SERVER_NAME | 'gisd.org.ls' |
SERVER_PORT | '80' |
SERVER_PROTOCOL | 'HTTP/1.0' |
SERVER_SOFTWARE | 'gunicorn/20.1.0' |
gunicorn.socket | <socket.socket fd=9, family=AddressFamily.AF_UNIX, type=SocketKind.SOCK_STREAM, proto=0, laddr=/apps/gisd_v2_website/gisdv2/gisd/run/gisd.sock> |
wsgi.errors | <gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7efc7e27de20> |
wsgi.file_wrapper | <class 'gunicorn.http.wsgi.FileWrapper'> |
wsgi.input | <gunicorn.http.body.Body object at 0x7efc7e73bb50> |
wsgi.input_terminated | True |
wsgi.multiprocess | False |
wsgi.multithread | False |
wsgi.run_once | False |
wsgi.url_scheme | 'http' |
wsgi.version | (1, 0) |
gisd.settings
Setting | Value |
---|---|
ABSOLUTE_URL_OVERRIDES | {} |
ADMINS | [] |
ADMIN_SITE_HEADER | 'GISD MANAGEMENT' |
ALLOWED_HOSTS | ['gisd.org.ls', 'dev.gisd.org.ls', '127.0.0.1', 'localhost', 'www.gisd.org.ls', '192.168.1.38 '] |
APPEND_SLASH | True |
AUTHENTICATION_BACKENDS | ['django.contrib.auth.backends.ModelBackend'] |
AUTH_PASSWORD_VALIDATORS | '********************' |
AUTH_USER_MODEL | 'auth.User' |
BASE_DIR | PosixPath('/apps/gisd_v2_website/gisdv2/gisd') |
CACHES | {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}} |
CACHE_MIDDLEWARE_ALIAS | 'default' |
CACHE_MIDDLEWARE_KEY_PREFIX | '********************' |
CACHE_MIDDLEWARE_SECONDS | 600 |
CONSTANCE_CONFIG | {'about_us_background': ('/static/images/bokong.jpeg', 'Contact Us Background', 'image_field'), 'blog_background': ('/static/images/blog_banner.png', 'Blog Background', 'image_field'), 'email1': ('support@leselitours.com', ''), 'email2': ('info@leselitours.com', ''), 'facebook_link': ('https://web.facebook.com/LeseliToursLS/', ''), 'instagram_link': ('https://www.instagram.com/leselitours/', ''), 'location': (' LGGA Building Pope John Paul II Road Maseru 100 Lesotho', ''), 'logo': ('/static/images/logo.png', ''), 'packages_background': ('/static/images/bokong.jpeg', 'Packages Background', 'image_field'), 'phone1': ('+266 2832 3135', ''), 'phone2': ('+266 5919 3135', ''), 'site_name': ('www.gisd.org.ls', ''), 'tour_listing_background': ('/static/images/bokong.jpeg', 'Tours Background', 'image_field'), 'twitter_handle': ('ToursLeseli', ''), 'twitter_link': ('https://twitter.com/ToursLeseli', ''), 'writeup': ('We are independent think tank that promotes adherence to good ' 'governance principles', ''), 'youtube_link': ('www.youtube.com', '')} |
CORS_ORIGIN_WHITELIST | ['http://localhost:8082', 'http://127.0.0.1:8082', 'http://127.0.0.1:8002', 'http://gisd.org.ls', 'https://gisd.org.ls', 'http://dev.gisd.org.ls', 'https://www.gisd.org.ls', 'https://gisd.headway.co.ls', 'http://192.168.1.38:8000'] |
CSRF_COOKIE_AGE | 31449600 |
CSRF_COOKIE_DOMAIN | None |
CSRF_COOKIE_HTTPONLY | False |
CSRF_COOKIE_NAME | 'csrftoken' |
CSRF_COOKIE_PATH | '/' |
CSRF_COOKIE_SAMESITE | 'Lax' |
CSRF_COOKIE_SECURE | False |
CSRF_FAILURE_VIEW | 'django.views.csrf.csrf_failure' |
CSRF_HEADER_NAME | 'HTTP_X_CSRFTOKEN' |
CSRF_TRUSTED_ORIGINS | ['http://gisd.org.ls', 'https://gisd.org.ls', 'http://www.gisd.org.ls', 'https://www.gisd.org.ls'] |
CSRF_USE_SESSIONS | False |
DATABASES | {'default': {'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'HOST': 'localhost', 'NAME': 'gisdv2', 'OPTIONS': {}, 'PASSWORD': '********************', 'PORT': '5432', 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}, 'TIME_ZONE': None, 'USER': 'gisd_user'}} |
DATABASE_ROUTERS | [] |
DATA_UPLOAD_MAX_MEMORY_SIZE | 2621440 |
DATA_UPLOAD_MAX_NUMBER_FIELDS | 1000 |
DATETIME_FORMAT | 'N j, Y, P' |
DATETIME_INPUT_FORMATS | ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M'] |
DATE_FORMAT | 'N j, Y' |
DATE_INPUT_FORMATS | ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y'] |
DEBUG | True |
DEBUG_PROPAGATE_EXCEPTIONS | False |
DECIMAL_SEPARATOR | '.' |
DEFAULT_AUTO_FIELD | 'django.db.models.BigAutoField' |
DEFAULT_CHARSET | 'utf-8' |
DEFAULT_EXCEPTION_REPORTER | 'django.views.debug.ExceptionReporter' |
DEFAULT_EXCEPTION_REPORTER_FILTER | 'django.views.debug.SafeExceptionReporterFilter' |
DEFAULT_FILE_STORAGE | 'django.core.files.storage.FileSystemStorage' |
DEFAULT_FROM_EMAIL | 'webmaster@localhost' |
DEFAULT_INDEX_TABLESPACE | '' |
DEFAULT_TABLESPACE | '' |
DISALLOWED_USER_AGENTS | [] |
EMAIL_BACKEND | 'django.core.mail.backends.smtp.EmailBackend' |
EMAIL_HOST | 'localhost' |
EMAIL_HOST_PASSWORD | '********************' |
EMAIL_HOST_USER | '' |
EMAIL_PORT | 25 |
EMAIL_SSL_CERTFILE | None |
EMAIL_SSL_KEYFILE | '********************' |
EMAIL_SUBJECT_PREFIX | '[Django] ' |
EMAIL_TIMEOUT | None |
EMAIL_USE_LOCALTIME | False |
EMAIL_USE_SSL | False |
EMAIL_USE_TLS | False |
FILE_UPLOAD_DIRECTORY_PERMISSIONS | None |
FILE_UPLOAD_HANDLERS | ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler'] |
FILE_UPLOAD_MAX_MEMORY_SIZE | 2621440 |
FILE_UPLOAD_PERMISSIONS | 420 |
FILE_UPLOAD_TEMP_DIR | None |
FIRST_DAY_OF_WEEK | 0 |
FIXTURE_DIRS | [] |
FORCE_SCRIPT_NAME | None |
FORMAT_MODULE_PATH | None |
FORM_RENDERER | 'django.forms.renderers.DjangoTemplates' |
IGNORABLE_404_URLS | [] |
IMAGEKIT_CACHEFILE_DIR | 'CACHE/images' |
IMAGEKIT_CACHEFILE_NAMER | 'imagekit.cachefiles.namers.hash' |
IMAGEKIT_CACHE_BACKEND | 'default' |
IMAGEKIT_CACHE_PREFIX | 'imagekit:' |
IMAGEKIT_CACHE_TIMEOUT | 300 |
IMAGEKIT_DEFAULT_CACHEFILE_BACKEND | 'imagekit.cachefiles.backends.Simple' |
IMAGEKIT_DEFAULT_CACHEFILE_STRATEGY | 'imagekit.cachefiles.strategies.JustInTime' |
IMAGEKIT_DEFAULT_FILE_STORAGE | 'django.core.files.storage.FileSystemStorage' |
IMAGEKIT_SPEC_CACHEFILE_NAMER | 'imagekit.cachefiles.namers.source_name_as_path' |
IMAGEKIT_USE_MEMCACHED_SAFE_CACHE_KEY | '********************' |
IMAGE_CROPPING_BACKEND | 'image_cropping.backends.easy_thumbs.EasyThumbnailsBackend' |
IMAGE_CROPPING_BACKEND_PARAMS | {} |
IMAGE_CROPPING_JQUERY_URL | '/static/admin/js/vendor/jquery/jquery.min.js' |
IMAGE_CROPPING_SIZE_WARNING | False |
IMAGE_CROPPING_THUMB_SIZE | (300, 300) |
INSTALLED_APPS | ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'imagekit', 'tinymce', 'constance', 'corsheaders', 'website.apps.WebsiteConfig'] |
INTERNAL_IPS | [] |
LANGUAGES | [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ar-dz', 'Algerian Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('ig', 'Igbo'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('ky', 'Kyrgyz'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('ms', 'Malay'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('tg', 'Tajik'), ('th', 'Thai'), ('tk', 'Turkmen'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')] |
LANGUAGES_BIDI | ['he', 'ar', 'ar-dz', 'fa', 'ur'] |
LANGUAGE_CODE | 'en-us' |
LANGUAGE_COOKIE_AGE | None |
LANGUAGE_COOKIE_DOMAIN | None |
LANGUAGE_COOKIE_HTTPONLY | False |
LANGUAGE_COOKIE_NAME | 'django_language' |
LANGUAGE_COOKIE_PATH | '/' |
LANGUAGE_COOKIE_SAMESITE | None |
LANGUAGE_COOKIE_SECURE | False |
LOCALE_PATHS | [] |
LOGGING | {} |
LOGGING_CONFIG | 'logging.config.dictConfig' |
LOGIN_REDIRECT_URL | '/accounts/profile/' |
LOGIN_URL | '/accounts/login/' |
LOGOUT_REDIRECT_URL | None |
MANAGERS | [] |
MEDIA_ROOT | '/apps/gisd_v2_website/gisdv2/gisd/media/' |
MEDIA_URL | '/media/' |
MESSAGE_STORAGE | 'django.contrib.messages.storage.fallback.FallbackStorage' |
MIDDLEWARE | ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware'] |
MIGRATION_MODULES | {} |
MONTH_DAY_FORMAT | 'F j' |
NUMBER_GROUPING | 0 |
PASSWORD_HASHERS | '********************' |
PASSWORD_RESET_TIMEOUT | '********************' |
PREPEND_WWW | False |
REST_FRAMEWORK | {'DEFAULT_PARSER_CLASSES': ['rest_framework.parsers.JSONParser'], 'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.AllowAny',)} |
ROOT_URLCONF | 'gisd.urls' |
SECRET_KEY | '********************' |
SECURE_CONTENT_TYPE_NOSNIFF | True |
SECURE_CROSS_ORIGIN_OPENER_POLICY | 'same-origin' |
SECURE_HSTS_INCLUDE_SUBDOMAINS | False |
SECURE_HSTS_PRELOAD | False |
SECURE_HSTS_SECONDS | 0 |
SECURE_PROXY_SSL_HEADER | None |
SECURE_REDIRECT_EXEMPT | [] |
SECURE_REFERRER_POLICY | 'same-origin' |
SECURE_SSL_HOST | None |
SECURE_SSL_REDIRECT | False |
SERVER_EMAIL | 'root@localhost' |
SESSION_CACHE_ALIAS | 'default' |
SESSION_COOKIE_AGE | 1209600 |
SESSION_COOKIE_DOMAIN | None |
SESSION_COOKIE_HTTPONLY | True |
SESSION_COOKIE_NAME | 'sessionid' |
SESSION_COOKIE_PATH | '/' |
SESSION_COOKIE_SAMESITE | 'Lax' |
SESSION_COOKIE_SECURE | False |
SESSION_ENGINE | 'django.contrib.sessions.backends.db' |
SESSION_EXPIRE_AT_BROWSER_CLOSE | False |
SESSION_FILE_PATH | None |
SESSION_SAVE_EVERY_REQUEST | False |
SESSION_SERIALIZER | 'django.contrib.sessions.serializers.JSONSerializer' |
SETTINGS_MODULE | 'gisd.settings' |
SHORT_DATETIME_FORMAT | 'm/d/Y P' |
SHORT_DATE_FORMAT | 'm/d/Y' |
SIGNING_BACKEND | 'django.core.signing.TimestampSigner' |
SILENCED_SYSTEM_CHECKS | [] |
SITE_ID | 1 |
SITE_NAME | 'www.gisd.org.ls' |
STATICFILES_DIRS | ('/apps/gisd_v2_website/gisdv2/gisd/static',) |
STATICFILES_FINDERS | ['django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder'] |
STATICFILES_STORAGE | 'django.contrib.staticfiles.storage.StaticFilesStorage' |
STATIC_ROOT | '/apps/gisd_v2_website/gisdv2/gisd/staticfiles/' |
STATIC_URL | '/static/' |
TEMPLATES | [{'APP_DIRS': True, 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': ['/apps/gisd_v2_website/gisdv2/gisd/templates'], 'OPTIONS': {'context_processors': ['website.context_processors.global_context', 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages']}}] |
TEST_NON_SERIALIZED_APPS | [] |
TEST_RUNNER | 'django.test.runner.DiscoverRunner' |
THOUSAND_SEPARATOR | ',' |
TIME_FORMAT | 'P' |
TIME_INPUT_FORMATS | ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M'] |
TIME_ZONE | 'Africa/Maseru' |
USE_DEPRECATED_PYTZ | False |
USE_I18N | True |
USE_L10N | True |
USE_THOUSAND_SEPARATOR | False |
USE_TZ | False |
USE_X_FORWARDED_HOST | False |
USE_X_FORWARDED_PORT | False |
WSGI_APPLICATION | 'gisd.wsgi.application' |
X_FRAME_OPTIONS | 'DENY' |
YEAR_MONTH_FORMAT | 'F Y' |
You’re seeing this error because you have DEBUG = True
in your
Django settings file. Change that to False
, and Django will
display a standard page generated by the handler for this status code.