Thursday, February 27, 2014

Re: View function and URL Conf basic question

On Wednesday, February 26, 2014 9:24:51 AM UTC-4:30, Daniel Roseman wrote:
On Wednesday, 26 February 2014 08:10:40 UTC, ApathyBear wrote:
Here is my urls.py:
from django.conf.urls.defaults import *  from mysite.views import hello, current_datetime, hours_ahead    urlpatterns = patterns('',      url(r'^hello/$', hello),      url(r'^time/$', current_datetime),      url(r'^time/plus/(\d{1,2})/$', hours_ahead),  )
And here is my View function associated with hours_ahead
from django.http import Http404, HttpResponse  import datetime    def hours_ahead(request, offset):      try:          offset = int(offset)      except ValueError:          raise Http404()      dt = datetime.datetime.now() + datetime.timedelta(hours=offset)      html = "<html><body>In %s hour(s), it will be %s.</body></html>" % (offset, dt)      return HttpResponse(html)
Now what is throwing me off is how 'offset' is a second argument to  the hours_ahead function. Yet I am not quite sure how it being the second argument makes it the case that it is associated with whatever is entered as a URL. Let me use an example to illustrate my confusion.

Say I request the URL:  http://127.0.0.1:8000/time/plus/2/ . Why is it the case that offset is '2'? I am not seeing why '2' is plucked out? What happened with 'time' and 'plus'? How does python/django know that the '2' is referring to offset?
That is what the regular expression does in your first snippet. `time` and `plus` are just matched, but not captured: the only thing that is captured is `(\d{1,2})`, because it is surrounded in parentheses.

If that's not clear for you, you should read a guide to regexes: http://regular-expressions.info  is a good one.
Hello,

As Daniel points out, this is related to regular expressions. You can read a full explanation here:
https://docs.djangoproject.com/en/1.6/topics/http/urls/#how-django-processes-a-request

You sholud also take a look at the 're' Python module. 

Regards,
Camilo.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/e7e7aace-49f6-47e4-8094-8c492c0987d4%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

No comments:

Post a Comment