对Django的JavaScript URL处理,不会造成伤害。
项目描述
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
许可证
支持
该项目目前由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
0.8.1
修复:构建中仍然存在 #53 的测试文件夹。=>> 在发布构建命令中添加了清理操作。
0.8.0
0.7.3
0.7.2
修复:#42 - “Templatetag js_reverse_inline 在 Django 1.9 中中断”感谢 tommikaikkonen
优化导入
0.7.1
修复:#41 - 使使用数字 0 作为 URL 参数成为可能
0.7.0
0.6.1
重构:将视图功能与 JS 生成分离
新增:根据 #33 用 rjsmin 替换了 slimit。感谢 chripede
0.6.0
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”
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分布
构建分布
哈希值 for django_js_reverse-0.10.2-py2.py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f17b328028a91f25ce2b8142e5e55b6622d0ab332324c7fd34aa002955f85a2d |
|
MD5 | 613247acb652d1b6103bec6ed42e483c |
|
BLAKE2b-256 | dd43802aed629f651a922a5a6f4932fa5dff5b5324b6e6f0e3054f4edb483134 |