Reputation: 115
I am new to django. I was creating forms in django with the help of an online tutorial. I didnot understand a line in the urls.py file. Can someone explain what exactly it means?
from django.conf.urls import url
from . import views
from . views import BlogListView, BlogDetailView, BlogCreateView
urlpatterns = [
url(r'^$', views.BlogListView.as_view(), name='post_list'),
url(r'^post/(?P<pk>\d+)/$', BlogDetailView.as_view(), name='post-detail'),
url(r'^post/new/$', BlogCreateView.as_view(), name='post_new'),
url(r'^post/(?P<pk>\d+)/edit/$', BlogUpdateView.as_view(), name='post_edit'),
]
I did not understand the following line:
url(r'^post/(?P<pk>\d+)/$'
What does (?P<pk>\d+)/$
signify?
Help please
Upvotes: 6
Views: 19422
Reputation: 396
It is a regular expression, which is matched against the actual URL
Here r'' specifies that the string is a raw string. '^' signifies the start, and $ marks the end.
Now 'pk' (when inside <>) stands for a primary key. A primary key can be anything eg. it can be a string, number etc. A primary key is used to differentiate different columns of a table.
Here it is written
<pk>\d+
\d matches [0-9] and other digit characters.
'+' signifies that there must be at least 1 or more digits in the number
So,
.../posts/1 is valid
.../posts/1234 is valid
.../posts/ is not valid since there must be at least 1 digit in the number
Now this number is sent as an argument to BlogListView and you run you desired operations with this primary key
Upvotes: 22
Reputation: 33
your BlogDetailView must be having 'id' as an parameter to capture blog post to be updated
this will capture 'id' of selected blog post and pass it to BlogDetailView
url(r'^post/(?P<pk>\d+)/$'
eg: for url: http://localhost:8000/post/2 2 will be captured and will be passed as an 'id' on to BlogDetailView
Upvotes: 1