2017-01-09 2 views
1

Я учусь Джанго из книги, и я попал в продвинутые URLs, здесь есть регулярное выражение, это не объясняет:Что означает это регулярное выражение в django?

urlpatterns = [ 
    url(r'^(?P<page_slug>\w+)-(?P<page_id>\w+)/', 
     include([ 
     url(r'^history/$', views.history), 
     url(r'^edit/$', views.edit), 
     url(r'^discuss/$', views.discuss), 
     url(r'^permissions/$', views.permissions), 
    ])), 
] 

Я понимаю, что это об удалении избыточности, но как это на самом деле Работа? Где вы находите: page_slug и page_id и что с ними - между ними?

+1

В [docs (link)] (https://docs.djangoproject.com/en/1.10/topics/http/urls/#named-groups) это в значительной степени объяснено. –

ответ

2

Если вы переезжаете на продвинутых URLs я полагаю, вы понимаете, как основные работы URL разметки. Шаблоны регулярных выражений используются всякий раз, когда мы имеем дело с переменными шаблонами url, например. В случае блога, URL может читаться как

  • domain.com/post-1/
  • domain.com/post-2/

или

  • domain.com/shortpost-1/
  • domain.com/shortpost-2/

и так далее.

Здесь мы можем увидеть общий шаблон, который может быть связан как с листом страницы (или префиксом), так и с идентификатором страницы/сообщения. Итак, мы создаем две переменные: page_slug и page_id. (Примечание: имена переменных, как где-нибудь еще можно переименовать по своему вкусу регулярное выражение, следовательно, создается как /(?P<page_slug>\w+)-(?P<page_id>\w+))/' где.

  • ?P<>: определяет, что мы определяем переменную
  • < text>: текст является вашим именем переменной
  • \w+: Ваше регулярное выражение, которое определяет, какой шаблон является приемлемым (In th is case \ w представляет что-либо в наборе [0-9a-zA-Z_] и + представляет любое количество повторений. Если вы хотите узнать больше об этом, я отправлю https://www.ntu.edu.sg/home/ehchua/programming/howto/Regexe.html для справки и http://regexr.com/ для практики.
  • и - между собой просто принудительны текст, который мог быть заменен сказать -no- выглядеть domain.com/page-no-1/

Остальная часть разметки похож на обычных URLs, что означает, что любой url, начинающийся в заданном шаблоне (?P<page_slug>\w+)-(?P<page_id>\w+)/, за которым следует указанный суффикс.

например. - domain.com/post-1/history/ - handeled by views.history и так далее.

Важная часть теперь заключается в том, как эти имена переменных влияют на ваши взгляды. Если вы используете взгляды функции на основе, на ваш взгляд история будет определяться как:

def history(request, page_slug, page_id): 
     #Your code using the two variables received. 
     #These might be values stored in db to dynamically fetch values 

в представлениях на основе класса для доступа к параметрам URL-адреса, которые вы используете self.args или self.kwargs, так что вы бы получить доступ к нему, делая self.kwargs['page_slug']

+0

Великий объяснил, понял все, кстати, в этом примере я должен добавить page_slug и page_id для каждого fuction, так? –

+0

Да, это правильно. – Saket

0

Это регулярное выражение соответствует следующим адресам:

/abc-def/history/ (abc goes to page_slug and def to page_id) 
/ghi-jkl/edit/ 

и т.д.

Смежные вопросы