从Django中包含的URL模式中提取路径变量

时间:2018-02-20 21:30:12

标签: django django-urls

对于这个问题,我一直在摸不着头脑,似乎无法弄清楚我做错了什么。

所以,问题是我似乎无法从应用程序内的urls.py中提取我想要的路径变量,以将其传递给访问路径时应该调用的函数。我试图获取它的URL配置是一个嵌套的,当一个访问事件时包含它,这是它的外观:

根URL配置:

urlpatterns = [
    url(r'^api/', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    url(r'^admin/', admin.site.urls),
    url(r'^events/', include(event_urls))
]

然后包含来自event_urls的网址:

urlpatterns = [
    url(r'alarm/<alarm>', alarm)
]

我想,应该是非常直接的,但上面的方法根本不起作用!如果我以这种方式构造URL,请求路径events / alarm / on将声明该路径不存在。在此之后,我认为它与URL不匹配,但我不明白为什么或如何解决它。我(从文档中)认为该部分可以匹配任何东西!

现在,我做了一些更多的调查,向我证明使用模式可能是正确的方法。添加正则表达式捕获路径变量使得函数实际触发!所以,在我这样做之后,URL匹配器更加快乐:

urlpatterns = [
    url(r'alarm/(?P<alarm>)', alarm)
]

虽然,查看被调用的警报视图函数中的alarm参数会将其显示为空...

1 个答案:

答案 0 :(得分:0)

找到解决方案,添加一个正确的正则表达式,以匹配我希望<alarm>部分到达的格式。我老实地仍然很困惑为什么简单地将<alarm>放不起作用所以我欢迎解释!无论如何,这就是它现在在工作状态下的样子:

urlpatterns = [
    url(r'alarm/(?P<alarm>\w+)', alarm)
]

这匹配任何长度的单词,我可以使它更加花哨但这是除了这个问题的重点。因此,匹配<alarm>的内容是使其有效的原因。