user3087161
user3087161

Reputation: 33

Django/Python "multiple repeat"

I'm working on python basics. I've got such issue, i can't figure it out.

views.py

# -*- coding: utf-8 -*-

from django.http import HttpResponse
import datetime

def hello(request):
    return HttpResponse("Hello, World!")

def time(request):
    now = datetime.datetime.now()
    html = "<html><body>Teraz jest %s</body></html>" %now
    return HttpResponse(html)

def time_offset(request, offset):
    delta = int(offset)
    dt = datetime.datetime.now() + datetime.timedelta(hours=offset)
    assert False
    shtml = "<html><body>za %s godzin będzie %s</body></html>" % (delta,dt)
    return HttpResponse(shtml)

urls.py

# -*- coding: utf-8 -*-
from django.conf.urls import patterns, include, url


urlpatterns = patterns('',
    url(r'^hello$', 'mysite.views.hello', name='hello'),
    url(r'^time$', 'mysite.views.time', name='time'),
    url(r'^time\plus\(/d+{1,2})$', 'mysite.views.time_offset', name='time_offset'),   )

It's all about the last line i urls. I'm activating there my new view "time_offset", must be something wrong with it, but I dont khnow what? I can't get this view to work.

Thank You for your help, cheers!

error code:

error at /time/plus/2
multiple repeat
Request Method: GET
Request URL:    http://127.0.0.1:8000/time/plus/2
Django Version: 1.4.5
Exception Type: error
Exception Value:    
multiple repeat
Exception Location: /usr/lib/python2.7/re.py in _compile, line 242
Python Executable:  /usr/bin/python
Python Version: 2.7.3
Python Path:    
['/home/maze/Dokumenty/djcode/mysite',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-linux2',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages/PIL',
 '/usr/lib/python2.7/dist-packages/gtk-2.0',
 '/usr/lib/pymodules/python2.7']
Server time:    Tue, 10 Dec 2013 04:40:17 -0600

Upvotes: 2

Views: 2558

Answers (1)

falsetru
falsetru

Reputation: 369334

The regular expression is combining two repetition modifiers (+, {1, 2})

>>> re.compile(r'\d+{1,2}')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\re.py", line 190, in compile
    return _compile(pattern, flags)
  File "C:\Python27\lib\re.py", line 242, in _compile
    raise error, v # invalid expression
sre_constants.error: multiple repeat

Use either + or {1,2} only:

>>> re.compile(r'\d{1,2}')
<_sre.SRE_Pattern object at 0x00000000025C5458>
>>> re.compile(r'\d+')
<_sre.SRE_Pattern object at 0x0000000002A454F0>

BTW, it's seems like the code exchanged \ and /.

... r'^time\plus\(/d+{1,2})$ ...
#          ^    ^ ^

Upvotes: 2

Related Questions