Проблема URL с кодом из учебника по django-голосования
Я пытаюсь использовать туториал django-голосования из этого блога:
http://new.justinlilly.com/blog/2008/nov/04/django-voting-a-brief-tutorial/
чтобы получить простую систему голосования вверх / вниз, работающую на моем приложении. Но, как и первый комментатор из этого поста, этот код в urls.py:
urlpatterns = patterns('',
url(r'^(?P[-\w]+)/(?Pup|down|clear)vote/?$', vote_on_object, tip_dict, name="tip-voting"),
)
Дает мне эту ошибку:
unknown specifier: ?P[
Я ужасный с регулярными выражениями, у кого-нибудь есть идея, как исправить этот URL?
1 ответ
Похоже, его блог искажает URL. Вероятно, должно быть:
url(r'^(?P<slug>[-\w]+)/(?P<direction>up|down|clear)vote/?$', vote_on_object, tip_dict, name="tip-voting"),
Используемый шаблон из документов Python является именованной группой:
(?P<name>...)
Similar to regular parentheses, but the substring matched by the group
доступен в остальной части регулярного выражения через символическое имя группы. Имена групп должны быть действительными идентификаторами Python, и каждое имя группы должно быть определено только один раз в регулярном выражении. Символическая группа также является пронумерованной группой, как если бы группа не была названа. Таким образом, группа с именем id в приведенном ниже примере также может называться пронумерованной группой 1.
For example, if the pattern is `(?P<id>[a-zA-Z_]\w*)`, the group can be
ссылается по имени в аргументах на методы сопоставления объектов, такие как
m.group('id')
или жеm.end('id')
, а также по имени в самом регулярном выражении (используя(?P=id)
) и текст замены дан.sub()
(с помощью\g<id>
).