Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何为这些URL编写正则表达式_Python_Regex_Django_Urlconf - Fatal编程技术网

Python 如何为这些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

我正在尝试构建一个小的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),
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。