Python 如何为这些URL编写正则表达式
我正在尝试构建一个小的wiki,但是我在为它们编写regex规则时遇到了问题 我想做的是,每个页面都应该有自己的编辑页面,当我在编辑页面上按submit时,它应该将我重定向到wiki页面 我希望在我的应用程序中有以下URL:Python 如何为这些URL编写正则表达式,python,regex,django,urlconf,Python,Regex,Django,Urlconf,我正在尝试构建一个小的wiki,但是我在为它们编写regex规则时遇到了问题 我想做的是,每个页面都应该有自己的编辑页面,当我在编辑页面上按submit时,它应该将我重定向到wiki页面 我希望在我的应用程序中有以下URL: http://example.com/ http://example.com/_edit/ 我的URLConf具有以下规则: url(r'(_edit/?P<page_name>(?:[a-zA-Z0-9_-]+/?)*)', views.edit), ur
http://example.com/
http://example.com/_edit/
url(r'(_edit/?P<page_name>(?:[a-zA-Z0-9_-]+/?)*)', views.edit),
url(r'(?P<page_name>(^(?:_edit?)?:[a-zA-Z0-9_-]+/?)*)', views.page),
url(r'(_edit/?P(?[a-zA-Z0-9_-]+/?)*),views.edit),
url(r'(?P(^(?:编辑?:[a-zA-Z0-9+/?)*),views.page),
但他们不工作的原因
我怎样才能做到这一点
似乎其中一个或两个匹配相同的内容。请尝试以下更简单的URL:
url(r'_edit/(?P<page_name>[\w-]+), views.edit)'
url(r'(?P<page_name>[\w-]+), views.page),
url(r''u edit/(?P[\w-]+),views.edit)'
url(r'(?P[\w-]+),views.page),
按照更简洁的方法,我将编辑URL定义为:
http://example.com/<pagename>/edit
http://example.com//edit
依我的拙见,这一点更为清楚和可猜测
然后,记住Django按照定义url模式的相同顺序循环url模式,并在第一个匹配传入请求的模式上停止。因此,它们的定义顺序非常重要
下面是您问题的答案:
^(?p[\w]+)$
将请求与任何/PageName匹配
请始终记住起始插入符号和最后的美元符号,这表示我们希望URL在regexp前后分别开始和停止,否则任何前导或尾随符号/字符也会使regexp匹配(在这种情况下,您可能希望显示404)
^\u edit/(?p[\w]+)$
匹配编辑URL(或者^(?p[\w]+)/edit$
,如果您喜欢通常称为REST URL的用户友好URL,而RESTfullnes是一个与URL样式无关的概念)
在URL中添加以下内容:
url(r'^(?P<page_name>[\w]+)$', views.page)
url(r'^_edit/(?P<page_name>[\w]+)$', views.edit)
url(r'^(?P[\w]+)$,views.page)
url(r'^_edit/(?P[\w]+)$,views.edit)
通过使用自己定义的集合更改\w
,可以轻松地强制URL不具有某些特定字符
了解有关Django URL调度的更多信息
注意:Regexp的功能与危险一样强大,尤其是在网络上。保持简单,并确保真正理解您定义的内容,否则您的web应用程序可能会暴露于多个安全问题
有些人在遇到问题时会想:“我知道,我会使用正则表达式。”现在他们有两个问题杰米·扎温斯基
这是一个家庭作业问题,所以URL的设计不由我决定。不过我会试试你的建议,谢谢。你在回答中也切换了url,编辑功能应该是第二个,带有编辑url。