2017-04-14 5 views
0

私はdjangoプロジェクトの管理者にいくつかのカスタムビューを書いています。私は "イベント"ページを持っており、私は "イベント"ページを作成したい(ちょうどdjangoポーリングチュートリアルと同じですが、管理者ではイベントページは詳細ビューと同じになります)。 いいえ、私は外来などを使用して通常の機能を組み込み、最初から構築する必要があります。すべてのものをキャッチするDjango(メザニン)URL

urls.py:

admin.autodiscover() 
def get_admin_urls(urls): 
    def get_urls(): 
     my_urls = [ 
      url(r'^my_cms/events', views.events, name="events"), 
      url(r'^my_cms/events/(?P<event_id>[0-9]+)/$', views.detail, name='detail'), 
     ] 
     return my_urls + urls 
    return get_urls 
admin_urls = get_admin_urls(admin.site.get_urls()) 
admin.site.get_urls = admin_urls 

urlpatterns = i18n_patterns("", 
    ("^admin/", include(admin.site.urls)), 
) 

..だから 訪問... /管理/ my_cms /イベント/作品 けど... /管理/ my_cms /イベント/ XXXXXXはちょうど同じイベントページを表示、

iが「イベント」など以外にURLパターンを変更した場合ではなく、詳細ビューより:

url(r'^my_cms/events', views.events, name="events"), 
url(r'^my_cms/[anything]/(?P<event_id>[0-9]+)/$', 

は、それはイベントビューCORRが表示されます理想的には...

私の質問は、なぜ最初のURLがすべてをキャッチしているのですか?私は何か(.../admin/my_cms/events/anythingilike)を置くことができ、イベントページを表示しますか?

ジョー

+0

'試してください' url(r '^ my_cms/events/$'、views.events、name = "events") ' – xiaoyi

答えて

1

r'^my_cms/events'は終わり$を持っていないので。つまり、このURLの先頭だけがチェックされ、エンディングはチェックされません。説明するために

r'^my_cms/events''my_cms/events'で始まる任意のURL、たとえば一致します:だから

'my_cms/events' 
'my_cms/events/xxxxxx' 
'my_cms/eventsxxxxxx' 

を、あなたは'my_cms/events/xxxxxx'の詳細ビューへの要求を行う場合でも、イベントページのURLが一致しています。 Djangoは一致を見つけたら、それ以上URLをチェックせず、関連するビューを呼び出します。修正するには

、このように、あなたのURLの正規表現の末尾に$記号を追加します。

代わりに `URL(R '^ my_cms /イベント'、views.events、名前= "イベント")の
url(r'^my_cms/events/$', views.events, name="events"), 
+0

ありがとう、annoyingly単純な.. :) – joeskru

関連する問題