我有一个案例,我定义了一些 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/