Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.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/4/regex/20.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 Django正则表达式url不工作_Python_Regex_Django - Fatal编程技术网

Python Django正则表达式url不工作

Python Django正则表达式url不工作,python,regex,django,Python,Regex,Django,http://127.0.0.1:8000/song/299d8fe1-7d9f-434a-ba64-94fb7a16b1a6/根据歌曲的uuid为我提供了所需的页面,效果很好。 (这是第二个url。) 这是url.py urlpatterns = patterns('', url(r'^$', views.index, name='index'), url(r'^song/(?P<uuid>\S+)/$', views.song, name=

http://127.0.0.1:8000/song/299d8fe1-7d9f-434a-ba64-94fb7a16b1a6/
根据歌曲的uuid为我提供了所需的页面,效果很好。 (这是第二个url。)

这是url.py

    urlpatterns = patterns('',
        url(r'^$', views.index, name='index'),
        url(r'^song/(?P<uuid>\S+)/$', views.song, name='song'),
-->     url(r'^song/(?P<uuid>\S+)/song_info/$', views.song_info, name='song_info'),
    )
箭头指向的那个,给了我一个404错误,消息是“没有歌曲匹配给定的查询。”

我猜正则表达式有个错误,但我想不出来

编辑

以下是歌曲和歌曲信息的视图:

views.py

    imports....

    @login_required
    def song(request, uuid):
        song = get_object_or_404(Song, uuid=uuid)
        song_status = song.get_status()
        form = SongInfoForm(initial={'song_info': song.song_info}, user=request.user)

        return render(request, 'songapp/song.html',
            {'form': form, 'song': song, 'song_status': song_status})

    def song_info(request):
        return render(request, 'songapp/song_info.html')

\S+
匹配任何字符序列,包括“/”。因此,您的第二个正则表达式将整个字符串“299d8fe1-7d9f-434a-ba64-94fb7a16b1a6/song_info/”作为UUID参数进行匹配,并将其发送到
views.song
,这并不奇怪,它找不到匹配的歌曲

您应该使您的正则表达式更具辨别力:

url(r'^song/(?P<uuid>[\w-]+)/$', views.song, name='song'),
url(r'^song/(?P<uuid>[\w-]+)/song_info/$', views.song_info, name='song_info'),
url(r'^song/(?P[\w-]+)/$,views.song,name='song'),
url(r'^song/(?P[\w-]+)/song\u info/$,views.song\u info,name='song\u info'),

此外,你通常应该把你的正则表达式按照从更具体到更一般的顺序排列;Django按顺序匹配,因此,如果您将song_信息放在第一位,也可以解决您的问题。

\S+
匹配任何字符序列,包括“/”。因此,您的第二个正则表达式将整个字符串“299d8fe1-7d9f-434a-ba64-94fb7a16b1a6/song_info/”作为UUID参数进行匹配,并将其发送到
views.song
,这并不奇怪,它找不到匹配的歌曲

您应该使您的正则表达式更具辨别力:

url(r'^song/(?P<uuid>[\w-]+)/$', views.song, name='song'),
url(r'^song/(?P<uuid>[\w-]+)/song_info/$', views.song_info, name='song_info'),
url(r'^song/(?P[\w-]+)/$,views.song,name='song'),
url(r'^song/(?P[\w-]+)/song\u info/$,views.song\u info,name='song\u info'),

此外,你通常应该把你的正则表达式按照从更具体到更一般的顺序排列;Django按顺序匹配,因此,如果您将song_信息放在第一位,也可以解决您的问题。

您应该使用此url

url(r'^song/(?P<id>[a-zA-Z0-9]{0,30}[^/]+)/song_info/$ 
url(r'^song/(?P[a-zA-Z0-9]{0,30}[^/]+)/song_info/$

此处,[^/]表示除/以外的任何类型的字符,后面的+与此类字符匹配一次或多次。您不希望最后的/位于uuid变量中,因此将其放在括号外,您应该使用此url

url(r'^song/(?P<id>[a-zA-Z0-9]{0,30}[^/]+)/song_info/$ 
url(r'^song/(?P[a-zA-Z0-9]{0,30}[^/]+)/song_info/$

这里,[^/]表示除/以外的任何类型的字符,紧跟其后的+与此类字符匹配一次或多次。您不希望最后一个/出现在uuid变量中,因此将其放在括号外

url(r'^song/(?p[a-zA-Z0-9]{0,30}[^/]+)/song_info/$我认为,在编辑框/to song/之后应该没有问题。url(r'^song/(?p[a-zA-Z0-9]{0,30}[^/]+)/song_info/$我想,编辑框/to-song/后应该没有问题。键入错误在/song/299d8fe1-7d9f-434a-ba64-94fb7a16b1a6/song_info/,song_info()得到一个意外的关键字参数“uuid”
song\u info
视图是否包含uuid参数?我很尴尬。真不敢相信我错过了。是的,它现在可以工作了,谢谢大家。TypeError在/song/299d8fe1-7d9f-434a-ba64-94fb7a16b1a6/song\u info/,song\u info()得到了一个意外的关键字参数“uuid”
song\u info
视图是否接受了uuid参数?我很尴尬。真不敢相信我错过了。是的,它现在可以工作了,非常感谢。尝试了,它仍然返回相同的404错误,“没有框匹配给定的查询”。尝试了,它仍然返回相同的404错误,“没有与给定查询匹配的框。”