跳转到主要内容

对Django的JavaScript URL处理,不会造成伤害。

项目描述

https://img.shields.io/pypi/v/django-js-reverse.svg https://img.shields.io/travis/ierror/django-js-reverse/master.svg https://coveralls.io/repos/github/vintasoftware/django-js-reverse/badge.svg?branch=master https://img.shields.io/github/license/ierror/django-js-reverse.svg https://img.shields.io/pypi/wheel/django-js-reverse.svg

Javascript url处理,对Django来说不会造成伤害。

现在该包由Vinta Software维护,但最初是由@ierror创建的。非常感谢你,Bernhard。

概述

Django JS Reverse是一个小巧的django应用,使得在javascript中处理命名URL变得简单且不烦人。

例如,你可以在javascript中检索一个命名URL

urls.py

url(r'^/betterliving/(?P<category_slug>[-\w]+)/(?P<entry_pk>\d+)/$', 'get_house', name='betterliving_get_house'),

在javascript中如下

Urls.betterlivingGetHouse('house', 12)

结果

/betterliving/house/12/

要求

Python版本

Django版本

3.11

4.2, 4.1, 4.0, 3.2

3.10

4.2, 4.1, 4.0, 3.2

3.9

4.2, 4.1, 4.0, 3.2

3.8

4.2, 4.1, 4.0, 3.2

安装

使用pip安装…

pip install django-js-reverse

…或者从github克隆项目。

git clone https://github.com/ierror/django-js-reverse.git

'django_js_reverse'添加到你的INSTALLED_APPS设置中。

INSTALLED_APPS = (
    ...
    'django_js_reverse',
)

使用webpack的用法

使用npm安装

npm install --save django-js-reverse

包含无缓存的视图…

urlpatterns = patterns('',
    url(r'^jsreverse.json$', 'django_js_reverse.views.urls_json', name='js_reverse'),
)

…或者一个提供URL JSON的缓存视图

from django_js_reverse import views
urlpatterns = patterns('',
    url(r'^jsreverse.json$', cache_page(3600)(views.urls_json), name='js_reverse'),
)

包含JavaScript到你的包中

// 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');
  ...
})();

作为静态文件的用法

首先通过以下命令生成静态文件

./manage.py collectstatic_js_reverse

如果你更改了一些URL或添加了一个应用程序并想更新reverse.js文件,请再次运行该命令。

之后将文件添加到您的模板中

<script src="{% static 'django_js_reverse/js/reverse.js' %}"></script>

与视图的使用

包含无缓存的视图…

urlpatterns = patterns('',
    url(r'^jsreverse/$', 'django_js_reverse.views.urls_js', name='js_reverse'),
)

… 或者一个提供javascript url的缓存版本

from django_js_reverse.views import urls_js
urlpatterns = patterns('',
    url(r'^jsreverse/$', cache_page(3600)(urls_js), name='js_reverse'),
)

在您的模板中包含javascript

<script src="{% url js_reverse %}" type="text/javascript"></script>

或者,如果您正在使用 Django > 1.5

<script src="{% url 'js_reverse' %}" type="text/javascript"></script>

作为模板标签的使用

您可以将js_reverse JavaScript内联放置到模板中,但是不建议使用内联JavaScript,因为它将使得部署安全的内容安全策略变得不可能。请参见django-csp

{% load js_reverse %}

<script type="text/javascript" charset="utf-8">
    {% js_reverse_inline %}
</script>

在javascript中使用urls

如果您的url名称是有效的javascript标识符([$A-Z_][-Z_$]*)i,您可以通过点符号访问它们

Urls.betterlivingGetHouse('house', 12)

如果命名url包含无效的标识符,请改用方括号符号

Urls['betterliving-get-house']('house', 12)
Urls['namespace:betterliving-get-house']('house', 12)

您还可以传递javascript对象来匹配关键字参数,如下面的示例所示

Urls['betterliving-get-house']({ category_slug: 'house', entry_pk: 12 })
Urls['namespace:betterliving-get-house']({ category_slug: 'house', entry_pk: 12 })

选项

可选地,您可以覆盖由django设置使用的默认javascript变量'Urls',以访问命名url

JS_REVERSE_JS_VAR_NAME = 'Urls'

可选地,您可以更改用于访问命名url的javascript变量所附加的全局对象名称。默认为this

JS_REVERSE_JS_GLOBAL_OBJECT_NAME = 'window'

可选地,您可以通过django设置禁用生成的javascript文件的压缩

JS_REVERSE_JS_MINIFY = False

默认情况下,包括所有命名空间

JS_REVERSE_EXCLUDE_NAMESPACES = []

要排除生成的javascript文件中的任何命名空间,请将它们添加到JS_REVERSE_EXCLUDE_NAMESPACES设置

JS_REVERSE_EXCLUDE_NAMESPACES = ['admin', 'djdt', ...]

如果您只想包含特定命名空间,请将它们添加到JS_REVERSE_INCLUDE_ONLY_NAMESPACES设置。提示:* 使用“”(空字符串)用于没有命名空间的url * 使用“foo0”来包含来自“foo”命名空间但不来自任何子命名空间的url(例如,“foo:bar”)

JS_REVERSE_INCLUDE_ONLY_NAMESPACES = ['poll', 'calendar', ...]

如果您在子路径下运行应用程序,collectstatic_js_reverse需要处理此问题。在您的django设置中定义前缀

JS_REVERSE_SCRIPT_PREFIX = '/myprefix/'

默认情况下,collectstatic_js_reverse将其输出(reverse.js)写入项目的STATIC_ROOT。您可以更改输出路径

JS_REVERSE_OUTPUT_PATH = 'some_path'

运行测试套件

tox

许可证

MIT

支持

该项目目前由Vinta Software维护。如果您需要支持,请联系我们contact@vintasoftware.com


享受吧!

0.10.2 (2023-08-14)

  • 放弃对不再官方支持的老版本的Python和Django的支持。

0.10.1b1 (2023-08-14)

  • 为Django 4.0和4.1、Python 3.8、3.9、3.10更新

0.10.1a1 (2023-08-14)

  • 更新pypi部署用户名和令牌

0.10.1a (2019-08-02)

  • 支持webpack和其他打包器

0.10.0 (2019-08-01)

  • 弃用django_js_reverse.VERSION。现在它始终是(0, 9, 2)

  • 弃用js_reverse_inline

  • 使用setuptools.setup

0.9.1

  • 修复:避免在使用js_reverse_inline时引入的XSS。风险较低,因为注入的内容可能是来自urlconfig的受信任输入。

0.9.0

0.8.2

  • 修复:Django 2.0.6 的一个错误修复破坏了 django-js-reverse #65 感谢 kavdev

0.8.1

  • 修复:构建中仍然存在 #53 的测试文件夹。=>> 在发布构建命令中添加了清理操作。

0.8.0

  • 新增:支持 Django 2.0: #58 感谢 wlonk

  • 修复:#53 - 不要将测试文件夹安装为单独的文件夹。已移动到 django_js_reverse 命名空间内。

0.7.3

  • 新增:支持 Django 1.10

  • 变更:将“生产”分支重命名为“master”

  • 修复:#48 - “在 README 中的全局对象名称中将 False 改为‘window’。”感谢 karamanolev

  • 修复:PR #45 - “修复:collectstatic_js_reverse 使用消息”感谢 ghedsouza

  • 修复:PR #44 - “移除重复的 _get_url 调用”感谢 razh

0.7.2

  • 修复:#42 - “Templatetag js_reverse_inline 在 Django 1.9 中中断”感谢 tommikaikkonen

  • 优化导入

0.7.1

  • 修复:#41 - 使使用数字 0 作为 URL 参数成为可能

0.7.0

  • 新增:默认情况下,collectstatic_js_reverse 将其输出(reverse.js)写入您的项目的 STATIC_ROOT。现在您可以通过更改设置:JS_REVERSE_OUTPUT_PATH 来更改此设置。感谢 mjnaderi

  • 新增:支持 Django 1.9 感谢 mjnaderi

  • 新增:现在可以只包含特定的命名空间。有关详细信息,请参阅 JS_REVERSE_INCLUDE_ONLY_NAMESPACES 设置。感谢 BrnoPCmaniak

0.6.1

  • 重构:将视图功能与 JS 生成分离

  • 新增:根据 #33 用 rjsmin 替换了 slimit。感谢 chripede

0.6.0

  • 修复:#27 感谢 michael-borisov

  • 新增:支持基于关键字的 URL 反转 #30 感谢 hyperair

0.5.1

  • 修复:当前的 ply 破坏了 slimit => 强制 ply==3.4

0.5.0

  • 新增:Django 允许您有多个具有相同名称的 URL 模式。

  • 此版本添加了对该功能的支持。感谢 defrex

  • 新增:测试支持 django 1.8

  • 新增:测试 script_prefix 的末尾没有斜杠的情况

0.4.6

  • 新增:您可以通过更改 JS_REVERSE_JS_GLOBAL_OBJECT_NAME 设置来更改用于访问命名 URL 的 JavaScript 变量附加到全局对象的名称(默认为 this)。感谢 aumo

0.4.5

  • 修复:如果您在子路径下运行应用程序,collectstatic_js_reverse 需要处理此问题。现在您可以通过定义 JS_REVERSE_SCRIPT_PREFIX 设置来处理此问题。感谢 lizter 报告了此问题

0.4.4

  • 改进:management 命令 collectstatic_js_reverse 如果 settings.STATIC_ROOT 未设置则抛出错误

  • 测试:从覆盖率中排除了一个调试打印

  • 移除:对 django 1.4 的支持

  • 新增:模板标签以将 js-reverse-js 内联包含在您的模板中

0.4.3

  • 新增:为 django rest framework 添加更好的支持 Django rest framework 生成类似于 user-list 的 URL 名称,因此现在它也被转换,因此 Urls['user-list']() 或更干净的 Urls.user_list() 都可使用。

  • 修复:JSReverseStaticFileSaveTest 正在运行并再次进行测试

  • 改进:清理 JavaScript 感谢 bulv1ne 提交的拉取请求

  • 新增:测试支持最新的 pypy 版本 pypy3-2.4.0 和 pypy-2.5.0

  • 修复:对于 Django >= 1.7,消除测试警告“MIDDLEWARE_CLASSES 未设置。”

0.4.2

  • 提供了 PyPI 轮子包

0.4.1

  • 修复:collectstatic 运行器:移动到自己的管理命令 collectstatic_js_reverse

0.4.0

  • 添加了保存到文件的能力

    <script src="{% static 'django_js_reverse/js/reverse.js' %}"></script>``

    要执行此操作,请运行 ./manage.py collectstatic

    添加 JS_REVERSE_EXCLUDE_NAMESPACES 选项以排除命名空间,默认值为 []

    例如,排除 admin 和 Django Debug Toolbar

    JS_REVERSE_EXCLUDE_NAMESPACES = ['admin', 'djdt']

    感谢 Andertaker

0.3.4

  • 新增:支持嵌套命名空间。感谢 hyperair

  • 新增:支持命名空间路径中的参数。感谢 hyperair

  • 新增:支持可选 URL 参数。感谢 hyperair

0.3.3

  • 新增:支持 Django 1.7

0.3.2

  • 新增:生成 JavaScript 文件的默认最小化

  • 修复:jsreverse 脚本的 MIME 类型。感谢 @emcsween

  • 测试:使用 selenium 进行更好的测试

0.3.1

  • 新增:支持命名空间

0.3.0

  • 测试支持 pypy、python 3.4、django 1.6

  • 重构 JS_REVERSE_JS_VAR_NAME js 变量名的包含

  • 移除“DeprecationWarning: The mimetype keyword argument is deprecated, use content_type instead”

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

django-js-reverse-0.10.2.tar.gz (25.0 kB 查看哈希值)

上传时间

构建分布

django_js_reverse-0.10.2-py2.py3-none-any.whl (24.5 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面