如何使用正则表达式在django url中获取整数

时间:2014-04-29 09:56:49

标签: python regex django

我尝试使用(?P<id_user>\d+)从我的网址抓取整数。但它给了我一个字符串。任何想法如何解决?我的id_user只需要整数4

这是我的urls.py片段:

url(r'^adm/list_users/assign_user_groups/(?P<id_user>\d+)/grant_user_group/(?P<id_group>\d+)/$', views.grant_user_group, name='grant_user_group'),

这是给我的错误:

ValueError at /adm/list_users/assign_user_groups/4/grant_user_group/2/

invalid literal for int() with base 10: '4/grant_user_group/2'

编辑:

这是我的urls.py代码:

from django.conf.urls import patterns, url
from adm import views

urlpatterns = patterns('',
    url(r'^adm/list_users/$', views.list_users, name='list_users'),
    url(r'^adm/list_users/add_user/$', views.add_user, name='add_user'),
    url(r'^adm/list_users/modify_user/(?P<id_user>.*)/$', views.modify_user, name='modify_user'),
    url(r'^adm/list_users/delete_user/(?P<id_user>.*)/$', views.delete_user, name='delete_user'),
    url(r'^adm/list_users/visualize_user/(?P<id_user>.*)/$', views.visualize_user, name='visualize_user'),
    url(r'^adm/list_users/assign_user_groups/(?P<id_user>.*)/$', views.assign_user_groups, name='assign_user_groups'),
    url(r'^adm/list_users/assign_user_groups/(?P<id_user>\d+)/grant_user_group/(?P<id_group>\d+)/$', views.grant_user_group, name='grant_user_group'),
    #url(r'^adm/list_users/assign_user_groups/(?P<id_user>.*)/deny_user_group/(?P<id_group>.*)/$', views.deny_user_group, name='deny_user_group'),
    url(r'^adm/create_group/$', views.create_group, name='create_group'),
    url(r'^adm/list_groups/$', views.list_groups, name='list_groups'),
    url(r'^adm/list_groups/(?P<id_group>.*)/assign_perm/$', views.assign_permissions, name='assign_perm'),
    url(r'^adm/list_groups/(?P<id_group>.*)/grant_perm/(?P<id_perm>.*)$', views.grant_permissions, name='grant_perm'),
    url(r'^adm/list_groups/(?P<id_group>.*)/deny_perm/(?P<id_perm>.*)$', views.deny_permissions, name='deny_perm'),
)

1 个答案:

答案 0 :(得分:1)

Django总是使用匹配的第一个模式。对于/adm/list_users/assign_user_groups/4/grant_user_group/2/之类的网址,匹配的模式是名为assign_user_groups的模式,永远不会使用grant_user_group

问题是您在.*中使用assign_user_groups,这是不够具体的,允许所有字符(包括&#34; /&#34;) - 这不是真的有道理,因为你只想捕捉数字。

您可以颠倒这两种模式的顺序,但您应该做的是使它们更具体,将所有.*更改为\d+