Package: django-js-reverse
Javascript url handling for Django that doesn’t hurt.This package is now maintained byVinta Softwarebut it was originally created by@ierror. Many thanks to you, Bernhard.OverviewDjango JS Reverse is a small django app that makes url handling ofnamed urlsin javascript easy and non-annoying..For example you can retrieve a named url:urls.py:url(r'^/betterliving/(?P<category_slug>[-\w]+)/(?P<entry_pk>\d+)/$', 'get_house', name='betterliving_get_house'),in javascript like:Urls.betterlivingGetHouse('house', 12)Result:/betterliving/house/12/RequirementsPython versionDjango versions3.114.2, 4.1, 4.0, 3.23.104.2, 4.1, 4.0, 3.23.94.2, 4.1, 4.0, 3.23.84.2, 4.1, 4.0, 3.2InstallationInstall usingpip…pip install django-js-reverse… or clone the project from github.git clone https://github.com/ierror/django-js-reverse.gitAdd'django_js_reverse'to yourINSTALLED_APPSsetting.INSTALLED_APPS = (
    ...
    'django_js_reverse',
)Usage with webpackInstall usingnpmnpm install --save django-js-reverseInclude none-cached view …urlpatterns = patterns('',
    url(r'^jsreverse.json$', 'django_js_reverse.views.urls_json', name='js_reverse'),
)… or a cached one that delivers the urls JSONfrom django_js_reverse import views
urlpatterns = patterns('',
    url(r'^jsreverse.json$', cache_page(3600)(views.urls_json), name='js_reverse'),
)Include JavaScript in your bundle:// utils/djangoReverse.mjs
import _ from 'lodash/fp';
import djangoJsReverse from 'django-js-reverse';

export default _.once(
  async () => {
    const res = await fetch('/jsreverse.json');
    const data = await res.json();
    return djangoJsReverse(data);
  }
)// somePlace.mjs
import djangoReverse from './utils/djangoReverse';

(async () => {
  const urls = await djangoReverse();
  const url = urls.someViewName('some-arg');
  ...
})();Usage as static fileFirst generate static file by./manage.py collectstatic_js_reverseIf you change some urls or add an app and want to update the reverse.js file,
run the command again.After this add the file to your template<script src="{% static 'django_js_reverse/js/reverse.js' %}"></script>Usage with viewsInclude none-cached view …urlpatterns = patterns('',
    url(r'^jsreverse/$', 'django_js_reverse.views.urls_js', name='js_reverse'),
)… or a cached one that delivers the urls javascriptfrom django_js_reverse.views import urls_js
urlpatterns = patterns('',
    url(r'^jsreverse/$', cache_page(3600)(urls_js), name='js_reverse'),
)Include javascript in your template<script src="{% url js_reverse %}" type="text/javascript"></script>or, if you are using Django > 1.5<script src="{% url 'js_reverse' %}" type="text/javascript"></script>Usage as template tagYou can place the js_reverse JavaScript inline into your templates,
however use of inline JavaScript is not recommended, because it
will make it impossible to deploy a secure Content Security Policy.
Seedjango-csp{% load js_reverse %}

<script type="text/javascript" charset="utf-8">
    {% js_reverse_inline %}
</script>Use the urls in javascriptIf your url names are valid javascript identifiers ([$A-Z_][-Z_$]*)i
you can access them by the Dot notation:Urls.betterlivingGetHouse('house', 12)If the named url contains invalid identifiers use the Square bracket
notation instead:Urls['betterliving-get-house']('house', 12)
Urls['namespace:betterliving-get-house']('house', 12)You can also pass javascript objects to match keyword aguments like the
examples bellow:Urls['betterliving-get-house']({ category_slug: 'house', entry_pk: 12 })
Urls['namespace:betterliving-get-house']({ category_slug: 'house', entry_pk: 12 })OptionsOptionally, you can overwrite the default javascript variable ‘Urls’ used
to access the named urls by django settingJS_REVERSE_JS_VAR_NAME = 'Urls'Optionally, you can change the name of the global object the javascript variable
used to access the named urls is attached to. Default isthisJS_REVERSE_JS_GLOBAL_OBJECT_NAME = 'window'Optionally, you can disable the minfication of the generated javascript file
by django settingJS_REVERSE_JS_MINIFY = FalseBy default all namespaces are includedJS_REVERSE_EXCLUDE_NAMESPACES = []To exclude any namespaces from the generated javascript file, add them to theJS_REVERSE_EXCLUDE_NAMESPACESsettingJS_REVERSE_EXCLUDE_NAMESPACES = ['admin', 'djdt', ...]If you want to include only specific namespaces add them to theJS_REVERSE_INCLUDE_ONLY_NAMESPACESsetting
tips:
* Use “” (empty string) for urls without namespace
* Use “foo0” to include urls just from “foo” namaspace and not from any subnamespaces (e.g. “foo:bar”)JS_REVERSE_INCLUDE_ONLY_NAMESPACES = ['poll', 'calendar', ...]If you run your application under a subpath, the collectstatic_js_reverse needs to take care of this.
Define the prefix in your django settings:JS_REVERSE_SCRIPT_PREFIX = '/myprefix/'By default collectstatic_js_reverse writes its output (reverse.js) to your project’s STATIC_ROOT.
You can change the output path:JS_REVERSE_OUTPUT_PATH = 'some_path'Running the test suitetoxLicenseMITSupportThis project is currently maintained byVinta Software. If you need support please contact us oncontact@vintasoftware.com.Enjoy!0.10.2 (2023-08-14)Drop support to older version of Python and Django that aren’t being officially supported anymore.0.10.1b1 (2023-08-14)Update for Django 4.0 and 4.1, Python 3.8, 3.9, 3.100.10.1a1 (2023-08-14)Update pypi deploy username and token0.10.1a (2019-08-02)support webpack and other bundlers0.10.0 (2019-08-01)deprecate django_js_reverse.VERSION. It will now always be(0, 9, 2)deprecate js_reverse_inlineuse setuptools.setup0.9.1Fix: avoid XSS introduced in 0.9.0 when using js_reverse_inline. A low threat as content injected is likely to be trusted input from the urlconfig.0.9.0New: Support for Python 3.7New: Support for Django 2.2New: Unit Tests Script prefix with no slash, changed URL Conf`#72 <https://github.com/ierror/django-js-reverse/issues/72>`__
Thank yougraingertFix: “ROOT_URLCONF not taken into account”#73#74Thank youLuukOostandgraingertRefactoring: “move template logic to view”#64Thank yougraingertFix: “Now using LooseVersion instead of StrictVersion to avoid issues with rc releases”#67Thank youkavdev0.8.2Fix: A bug fix in Django 2.0.6 has broken django-js-reverse#65Thank youkavdev0.8.1Fix: The tests folder of the#53was still present in the build. => Added cleanup to the release make command.0.8.0New: Support for Django 2.0:#58Thank youwlonkFix:#53- Don’t install the tests folder as a separate folder.  Moved inside the django_js_reverse namespace.0.7.3New: Support for Django 1.10Chg: Renamed “production” branch to “master”Fix:#48- “Change False to ‘window’ in global object name in README.”
Thank youkaramanolevFix:PR #45- “Fix: collectstatic_js_reverse usage message”
Thank youghedsouzaFix:PR #44- “Remove duplicate _get_url call”
Thank yourazh0.7.2Fix:#42- “Templatetag js_reverse_inline breaks on Django 1.9”
Thank youtommikaikkonenOptimized imports0.7.1Fix:#41- make it possible to use number 0 as url argument0.7.0New: By default collectstatic_js_reverse writes its output (reverse.js) to your project’s STATIC_ROOT. Now You can change settings: JS_REVERSE_OUTPUT_PATH
Thank youmjnaderiNew: Support for Django 1.9
Thank youmjnaderiNew: It’s now possible to include specific namespaces only. See JS_REVERSE_INCLUDE_ONLY_NAMESPACES setting for details.
Thank you BrnoPCmaniak0.6.1Refactored: Separate the view functionality from the JS generationNew: Replaced slimit by rjsmin based on#33Thank you chripede0.6.0Fix:#27Thank you michael-borisovNew: Support for Keyword-based URL reversing#30Thank you hyperair0.5.1Fix: Current ply breaks slimit => force ply==3.40.5.0New: Django allows you to have multiple URL patterns with the same name.This release adds support for the featuer.
Thank you defrexNew: Test support for django 1.8New: test for script_prefix without ending slash0.4.6New: You can change the name (default=this) of the global object the javascript variable used to access the named
urls is attached to by changing JS_REVERSE_JS_GLOBAL_OBJECT_NAME setting.
Thank you aumo0.4.5Fix: If you run your application under a subpath, the collectstatic_js_reverse needs to take care of this. You can
now define a setting JS_REVERSE_SCRIPT_PREFIX that handles this issue.
Thank you lizter for reporting the issue0.4.4Improvement: management command collectstatic_js_reverse throws an error if settings.STATIC_ROOT is not setTests: exluded a debug print from coverageRemoved: support for django 1.4New: Templatetag to include js-reverse-js inline in your templates0.4.3New: Add better support for django rest framework
Django rest framework generates url names like user-list, so it get’s converted now as well soUrls['user-list']()or the cleanerUrls.user_list()are both usable.Fix: JSReverseStaticFileSaveTest is working and being tested againImprovement: Cleanup Javascript
Thank you bulv1ne for the pull requestNew: Test support for the latest pypy versions pypy3-2.4.0 and pypy-2.5.0Fix: Get rid of test warning “MIDDLEWARE_CLASSES is not set.” for Django >= 1.70.4.2Provided PyPI wheel Package0.4.1Fix: collectstatic runner: moved to own management command collectstatic_js_reverse0.4.0Add ability to save in file:<script src="{% static 'django_js_reverse/js/reverse.js' %}"></script>``to do this run ./manage.py collectstaticAdd JS_REVERSE_EXCLUDE_NAMESPACES option
to exclude namespaces from import
default is []To exclude e.g. admin and Django Debug Toolbar:JS_REVERSE_EXCLUDE_NAMESPACES = ['admin', 'djdt']Thank you Andertaker0.3.4New: Support for nested namespaces. Thank you hyperairNew: Support for arguments within namespace path. Thank you hyperairNew: Support for optional url arguments. Thank you hyperair0.3.3New: Django 1.7 support0.3.2New: Default minification of the generated javascript fileFix: content type of the jsreverse script. Thank you @emcsweenTesting: Use selenium for better testing0.3.1Added support for namespaces0.3.0Test support for pypy, python 3.4, django 1.6Refactored include of JS_REVERSE_JS_VAR_NAME js var nameGet rid of “DeprecationWarning: The mimetype keyword argument is depracated, use content_type instead”