2017-04-14 115 views
0

我在django項目的管理員中編寫了一些自定義視圖,應該很簡單。我有一個「事件」頁面,我想創建一個「事件」頁面(與django民意調查教程完全相同,但在管理員中,活動頁面與詳細視圖相同)。 不,我不能使用內置的功能正常使用外鍵等,需要從頭開始構建。Django(夾層)網址捕捉所有內容

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只是顯示在同一頁面的事件,而不是詳細視圖

如果我URL模式更改爲「事件」如任何其他:

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

然後它會顯示該事件視圖科爾ectly ...

所以我的問題是爲什麼第一個URL捕捉所有的東西?我可以把任何東西(... /管理/ my_cms/events/anythingilike),它會顯示事件頁面?

+0

代替'URL(R '^ my_cms /事件',views.events,名稱= 「事件」)的'嘗試'URL(r'^ my_cms/events/$',views.events,name =「events」)' – xiaoyi

回答

1

因爲r'^my_cms/events'沒有$底。這意味着,只有這個URL的開頭被檢查,而不是結束。

爲了說明,r'^my_cms/events'將匹配以'my_cms/events'開頭的網址,例如:

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

所以,即使您對細節視圖的請求在'my_cms/events/xxxxxx',活動頁面URL匹配。一旦Django找到匹配項,它就不檢查更多的URL並調用相關的視圖。

要解決,你的URL的正則表達式的末尾添加$標誌,就像這樣:

url(r'^my_cms/events/$', views.events, name="events"), 
+0

謝謝,煩人簡單.. :) – joeskru