如何为这些URL编写正则表达式

2024-04-25 23:06:51 发布

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

我正在尝试构建一个小的wiki,但是在为它们编写regex规则时遇到了问题。你知道吗

我想做的是,每个页面都应该有自己的编辑页面,当我在编辑页面上按submit时,它应该将我重定向到wiki页面。你知道吗

我希望在我的应用程序中有以下URL:

  • http://example.com/<page_name>

  • http://example.com/_edit/<page_name>

我的URLConf有以下规则:

url(r'(_edit/?P<page_name>(?:[a-zA-Z0-9_-]+/?)*)', views.edit),
url(r'(?P<page_name>(^(?:_edit?)?:[a-zA-Z0-9_-]+/?)*)', views.page),

但他们不工作的原因。你知道吗

我怎样才能做到这一点?你知道吗

似乎一个或两个匹配相同的东西。你知道吗


Tags: namecomhttpurl编辑规则examplewiki
2条回答

请尝试以下更简单的URL:

url(r'_edit/(?P<page_name>[\w-]+), views.edit)'
url(r'(?P<page_name>[\w-]+), views.page),

按照更简洁的方法,我将编辑URL定义为:

http://example.com/<pagename>/edit

在我看来,这是更清楚和猜测。你知道吗

然后,记住Django按照定义的顺序循环url模式,并在第一个匹配传入请求的模式上停止。所以它们的定义顺序非常重要。你知道吗

回答你的问题:

^(?P<page_name>[\w]+)$将请求与任何/PageName匹配

请始终记住起始插入符号和最后的美元符号,这表示我们希望URL在regexp前后分别开始和停止,否则任何前导或尾随符号/字符都会使regexp匹配(在这种情况下,您可能希望显示404)。你知道吗

^_edit/(?P<page_name>[\w]+)$匹配编辑URL(或者^(?P<page_name>[\w]+)/edit$如果您喜欢用户友好的URL通常称为REST URL,而RESTfullnes是一个与URL样式无关的概念)。你知道吗


在URL中输入以下内容:

url(r'^(?P<page_name>[\w]+)$', views.page)
url(r'^_edit/(?P<page_name>[\w]+)$', views.edit)

通过使用自己定义的集合更改\w,您可以轻松地强制url不具有某些特定字符。

要了解有关Django URL调度read here的更多信息。你知道吗

注意:Regexp和危险一样强大,尤其是在网络上。保持简单,确保真正理解您定义的是什么,否则您的web应用程序可能会暴露于几个安全问题。你知道吗

Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems. Jamie Zawinski

相关问题 更多 >