跳转到主要内容

在客户端世界中公开和执行Django URL的逆向查找。

项目描述

Django-js-routes 是一个Django应用程序,允许在客户端执行Django命名URL模式的公开和逆向查找。

主要需求

Python 3.6+, Django 3.2+

安装

要安装Django-js-routes,请使用以下pip命令

$ pip install django-js-routes

安装包后,您需要将应用程序添加到项目设置模块中的INSTALLED_APPS

INSTALLED_APPS = (
    # all other apps...
    'js_routes',
)

您可以通过设置JS_ROUTES_INCLUSION_LIST配置项来定义要向客户端公开的URL模式或URL命名空间。此设置允许定义哪些URL应该序列化并通过生成的和/或导出的JavaScript辅助程序提供给客户端。此列表应仅包含URL模式名称或命名空间。以下是一个示例:

JS_ROUTES_INCLUSION_LIST = [
    'home',
    'catalog:product_list',
    'catalog:product_detail',
]

请注意,如果将命名空间包含在此列表中,则所有底层URL将通过生成的JavaScript辅助程序向客户端公开。Django-js-routes在设计上是安全的,因为只有您在此包含列表中配置的URL将在客户端公开。

配置要公开的URL列表后,您可以将{% js_routes %}标签添加到基本模板中,以确保在需要时可以访问JavaScript辅助程序。

{% load js_routes_tags %}
<html>
    <head>
    </head>
    <body>
        <!-- At the bottom of the document's body... -->
        {% js_routes %}
    </body>
</html>

用法

您可以通过生成的window.reverseUrl函数来反转通过JS_ROUTES_INCLUSION_LIST设置配置的URL模式,这基本上与在Django侧使用reverse相同。

window.reverseUrl('home');
window.reverseUrl('catalog:product_list');
window.reverseUrl('catalog:product_detail', productId);
window.reverseUrl('catalog:product_detail', { pk: productId });

设置

JS_ROUTES_INCLUSION_LIST

默认值:[]

JS_ROUTES_INCLUSION_LIST配置项允许定义通过生成的JavaScript辅助程序向客户端公开的URL模式和URL命名空间。

高级功能

仅在Django模板中插入序列化的URL

默认情况下,{% js_routes %}模板标签仅允许触发序列化URL的生成(存储在window对象上的JavaScript对象中),并使用Django的static模板标签将JavaScript URL解析器函数包含在您的HTML中。实际上,{% js_routes %}语句的标准用法相当于:

{% js_routes routes_only=True %}
<script src="{% static 'js/routes/resolver.js' %}"></script>

routes_only选项允许仅在{% js_routes %}的输出中包含序列化URL。它允许您使用另一个static语句包含与Django-js-routes一起提供的JavaScript URL解析器。这还允许您在需要时缓存{% js_routes routes_only=True %}语句的输出(因此序列化URL不会为每个请求生成)。

导出JavaScript路由解析器

如前所述,{% js_routes %}模板标签触发序列化URL的生成并在最终HTML中包含客户端URL解析器。这种行为的一个缺点是,每次渲染HTML模板时都需要生成序列化URL。

相反,可以将整个序列化URL列表和URL解析器函数放入单个JavaScript模块文件中。这可以通过使用dump_routes_resolver命令实现,如下所示:

$ python manage.py dump_routes_resolver --format=default --output=my_exported_resolver.js

--output选项允许指定序列化路由和解析器函数应保存到的文件,而--format选项允许指定要使用的JavaScript格式。

--format接受以下值:

  • default将路由作为与window对象关联的对象包含,URL解析器通过window.reverseUrl函数提供(这对应于标准使用{% js_routes %}模板标签的行为)。

  • es6允许将路由和URL解析器保存为ES6模块,其中reverseUrl函数是默认导出。

许可协议

MIT。有关更多详细信息,请参阅LICENSE

项目详情


下载文件

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

源代码分发

django-js-routes-0.2.0.tar.gz (11.3 kB 查看散列)

上传时间 源代码

构建分发

django_js_routes-0.2.0-py3-none-any.whl (16.9 kB 查看散列)

上传时间 Python 3

支持