python - Django 按名称获取 url 正则表达式

标签 python regex django

我有一个案例,我定义了一些 Django url 模式,现在我想检索与给定模式关联的正则表达式。我想要它是因为我想将这些正则表达式传递给客户端,这样我也可以在客户端中检查 url(我说的是浏览器端历史操作)并在匹配时触发适当的处理程序(在 JavaScript 中)。

例如,如果我有:

# urls.py
urlpatterns = patterns("",
    url(r"^$", Index.as_view(), name="index"),
    url(r"^user/", include("User.urls", namespace="User")),
)

# User/urls.py
urlpatterns = patterns("",
    url(r"^profile/(?P<slug>.*)$", GetProfile.as_view(), name="get_profile")
)

那么我需要以下功能:

>>> get_regex("User:get_profile")
'^user/profile/(?P<slug>.*)$'

(或者 Django 翻译它)。请注意,我使用的是 namespace 。有任何想法吗? Django1.5.

此外,我还设法编写了一个函数,该函数返回与传递的名称关联的 urlpattern 对象,但是执行 url.regex.pattern返回 '^profile/(?P<slug>.*)$ .因此,正如您所见,没有领先的 ^user/ .

最佳答案

有几个 javascript reverse 实现。

http://djangojs.readthedocs.org/en/latest/djangojs.html#reverse-urls

https://github.com/version2/django-js-reverse

这不是正则表达式,但您可以像在服务器中一样在客户端代码中测试 url,所以我认为它更好。

编辑:由于您需要忽略 URL 参数,您可以从 django-js 的源代码中得到一个想法 here .它已经删除了可选的 URL 参数,因此它可能与您描述的非常相似。

代码遍历每个模式,从每个参数子正则表达式中删除 ?P,因此您可以将它们替换为 .*

重点是您在该源中拥有您可能需要执行实现的每个正则表达式。请参阅第 24-29 行中的全局模式。

关于python - Django 按名称获取 url 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18653278/

相关文章:

python - 使基于 SQL 的事件提要更快的好方法

python - 在 Django 中允许每个用户生成 1 个 View

python - 使用 Python Wand 只播放一次 GIF

php - 正则表达式组,直到组内最后一次出现

python - 将Python win32evtlog对象转换为xml

regex - Diff - 排除不区分大小写的模式

ruby - 匹配不包含特定单词的字符串

python - Django-ForeignKey-如何正确使用它?

python - 从扫描的 PDF 中提取文本,而不将扫描保存为新的文件图像

python - 如何在 python 中生成声音输出..?