2017-01-09 3 views
1

ここでそれを説明していない正規表現があり、私は本からジャンゴを学んだし、私は高度なURLの中に持っている:この正規表現は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_slugpage_idはどこから入手できますか?それらの間には何がありますか?

+1

[docs(link)](https://docs.djangoproject.com/en/1.10/topics/http/urls/#named-groups)で説明しています。 –

答えて

2

を。 正規表現のパターンは、たとえば次のような変数urlパターンを処理するときに使用されます。ブログの場合は、URLが

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

または

  • domain.com/shortpost-1/
  • domain.com/shortpost-2/
として読むかもしれません

など。

ここでは、ページスラッグ(またはプレフィックス)とページ/投稿IDとして関連付けることができる共通のパターンを見ることができます。 したがって、page_slugとpage_idという2つの変数を作成します。 (注意:他のどこのような変数名は、お好みに合わせて変更でき 正規表現が故に/(?P<page_slug>\w+)-(?P<page_id>\w+))/' として作成されます。

  • ?P<>は:私たちは、変数
  • < textを定義していることを定義します>:テキストは変数名です
  • \w+:あなたの正規表現はどんなパターンが受け入れられるかを定義します大文字小文字\ wはセット内のすべてを表します。[0-9a-zA-Z_]および+は任意の数の繰り返しを表します。これについてもっと知りたい場合は、参考のためにhttps://www.ntu.edu.sg/home/ehchua/programming/howto/Regexe.html、実践のためにhttp://regexr.com/を参照してください。
  • との間で-単純に置き換えられている可能性がcompulsaryテキストです-no-domain.com/page-no-1/

のように見えるようにマークアップの残りの部分があることを意味し、通常のURLに似ていると言います与えられたパターンで始まる任意のURL (?P<page_slug>\w+)-(?P<page_id>\w+)/の後に接尾辞が付いています。

- domain.com/post-1/history/ - はviews.historyなどと引き渡されます。

重要な部分は、これらの変数名がビューにどのように影響するかです。 あなたは機能ベースのビューを使用している場合は、あなたの履歴ビューのように定義されますので、あなたがself.kwargs['page_slug']

を行うことによって、それをアクセスし、あなたが self.argsself.kwargsを使用するURLパラメータにアクセスするには、クラスベースのビューでは

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 

+0

偉大な説明、すべてのことを理解し、この例では、私はすべてのfuctionにpage_slugとpage_idを追加する必要がありますか? –

+0

はい、正しいです。 – Saket

0

この正規表現は、次のURLと一致する:あなたは私はあなたが基本的なURLのマークアップがどのように機能するかを理解して推定し、高度なURLの上に移動する場合は

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

など

関連する問題