Reputation: 99
I tried to use (?P<id_user>\d+)
to grab integers from my url. But it gives me a string. Any ideas how to solve it? I only need the integer 4
for my id_user.
Here's my urls.py snippet:
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'),
This is the error that gave me:
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'
Edit:
Here's my urls.py code:
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'),
)
Upvotes: 0
Views: 808
Reputation: 25052
Django always uses the first pattern that matches. For urls like /adm/list_users/assign_user_groups/4/grant_user_group/2/
the pattern that matches is the one named assign_user_groups
, and grant_user_group
is never used.
The problem is your use of .*
in assign_user_groups
, which is not specific enough, allowing all characters (including "/") - this doesn't really make sense, since you want to capture only numbers.
You could reverse the order of those two patterns, but what you should do is to make them more specific, changing all occurrences of .*
to \d+
.
Upvotes: 1