#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.

Reply via email to