#35985: SCRIPT_NAME / FORCE_SCRIPT_NAME ignored when running reverse() on
non-main
thread
-------------------------------+---------------------------------------
Reporter: Pēteris Caune | Type: Bug
Status: new | Component: Core (URLs)
Version: 5.1 | Severity: Normal
Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------+---------------------------------------
I've configured my Django project to run on a subpath (under
`example.org/some_prefix` instead of `example.org`).
The project has a management command which generates URLs using
`django.urls.reverse()`.
Since the management command cannot read SCRIPT_NAME from WSGI parameters,
the project has `FORCE_SCRIPT_NAME = "/some_prefix"` in settings.py.
The management command generates URLs that include the prefix as expected
if the code runs on main thread. But if the management command spawns a
thread, the code running on thread **generates URLs without the prefix**.
I'm not sure but I think this is related to `hc.urls.base._prefix` being a
`Local` object. I'm guessing it, as the name suggests, does not share data
between threads. Even though `set_script_prefix` is called on main thread,
the other threads do not see it.
A simple workaround is for the user to call `set_script_prefix` by
themselves:
{{{
from django.conf import settings
from django.urls import set_script_prefix
def this_will_be_run_on_thread():
if settings.FORCE_SCRIPT_NAME:
set_script_prefix(settings.FORCE_SCRIPT_NAME)
# do work here
}}}
But perhaps there's something Django could do here as well:
* perhaps, change django.urls implementation so that threads do share the
script prefix storage?
* if there are disadvantages to that, mention this gotcha in the
documentation
I'm happy to provide a dummy project demonstrating the issue if that would
be helpful.
--
Ticket URL: <https://code.djangoproject.com/ticket/35985>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/django-updates/01070193aabf8982-d7b8074d-42b3-4866-9d5b-8d496938a1e9-000000%40eu-central-1.amazonses.com.