Проблема 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>).

Другие вопросы по тегам