如何在Django urlparser中解析列表?

2024-06-02 05:55:53 发布

您现在位置:Python中文网/ 问答频道 /正文

在堆栈溢出时,您可以在一个URL(如http://stackoverflow.com/questions/tagged/django+python)处查看带有多个标记的问题列表。你知道吗

我想在我正在工作的一个项目中做一些类似的事情,其中一个url参数将是一个标记列表,但我不知道如何编写一个regexurlparser来解析它。我喜欢SO使用+符号的方式,但它不是一个dealbreaker。我还设想urlparser可能必须将整个字符串(foo+bar+baz)作为单个变量来提供给视图,这也很好,因为我可以在视图本身中拆分它—也就是说,我不希望URL解析器给视图一个已经拆分的列表,但如果可以,那就更好了!你知道吗

现在我只有:

url(r'^documents/tag/(?P<tag>\w+)/$', ListDocuments.as_view(), name="list_documents"),

因为\w+只给我那些[A-Za-z0-9_],而不是+,所以它只提取了一个标签。我试过这样的方法:

url(r'^documents/tag/(?P<tag>[\w+\+*])/$', ListDocuments.as_view(), name="list_documents"),

但这不再匹配documents/tag/foodocuments/tag/foo+bar。你知道吗

请帮忙,我不太喜欢正则表达式,谢谢!你知道吗


Tags: name标记view视图url列表foo堆栈
2条回答

目前有效:

url(r'^documents/tag/(?P<tag>[A-Za-z0-9_\+]+)/$', ListDocuments.as_view(), name="list_documents"),

但是我希望能够把w放回去,而不是像那样的完整字符列表。你知道吗

[编辑]

我们开始吧:

url(r'^documents/tag/(?P<tag>[\w\+]+)/$', ListDocuments.as_view(), name="list_documents"),

如果Django urlparser有办法为视图提供一个实际的列表而不是一个大的长字符串,我仍然会选择一个更好的答案,但是如果这不可能,这个解决方案确实有效。你知道吗

这不可能自动完成。从documentation:“每个捕获的参数都作为一个普通的Python字符串发送到视图,而不管正则表达式进行何种匹配。”。你知道吗

答案中的第二个regex是可以的,但是它确实允许一些您可能不想要的东西(例如'django+++python+')。更严格的版本可能是:(?P<tag>\w+(?:\+\w+)*)。然后您可以在视图中执行一个简单的tag.split('+'),而不必担心任何边缘情况。你知道吗

相关问题 更多 >