0

在 Stack Overflow 上,您可以在 URL 上查看带有多个标签的问题列表,例如http://stackoverflow.com/questions/tagged/django+python.

我想在我正在处理的项目中做类似的事情,其中​​一个 url 参数将是标签列表,但我不确定如何编写一个可以解析它的正则表达式 urlparser。我喜欢 SO 使用这个+标志的方式,但这不是一个破坏者。我还想象 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/foo也不documents/tag/foo+bar

请协助,我对正则表达式不是很好,谢谢!

4

2 回答 2

1

不可能自动执行此操作。从文档中:“每个捕获的参数都作为纯 Python 字符串发送到视图,无论正则表达式进行哪种匹配。” 在视图中拆分它是要走的路。

您答案中的第二个正则表达式是可以的,但它确实允许一些您可能不想要的东西(例如'django+++python+')。更严格的版本可能类似于:(?P<tag>\w+(?:\+\w+)*). 然后你可以在视图中做一个简单的事情tag.split('+'),而不用担心任何边缘情况。

于 2013-10-07T05:41:09.033 回答
0

这暂时有效:

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 有办法为视图提供一个实际列表而不是一个大的长字符串,我仍然会选择一个更好的答案,但如果这不可能,这个解决方案确实有效。

于 2013-10-07T03:08:35.620 回答