2013-08-23 20 views
0

我正在創建一個應用程序,其中一個模型的主鍵包含斜槓。例如,xx/xxxxxxx/xx。這在我編寫URL conf時會出現問題,因爲我不想將其鎖定爲僅包含一定數量的斜線,但我希望能夠具有子視圖以及...即在主鍵中使用帶斜槓的通用視圖

  • http://example.com/xx/xxxxxxx/xx/
  • http://example.com/xx/xxxxxxx/xx/edit/

目前我的URL配置看起來像

programme_patterns = patterns('', 
    url(r'^$', 
     login_required(views.ProgrammeDetailView.as_view()), 
     name='programme_detail'), 
    url(r'^edit/$', 
     login_required(views.ProgrammeFormView.as_view()), 
     name='programme_edit'), 
) 

urlpatterns = patterns('', 
    url(r'^programmes/?P<pk>.*?/.*?/.*?)/', 
     include(programme_patterns)) 
) 

具有主鍵斜槓的URL也使得米因爲它是非語義的,所以感到不舒服,這應該看起來像一個「目錄」,而不是三個巢穴。

我想知道是否有一種方法來轉換在URL中使用的主鍵,例如,用下劃線替換斜線。我只是想不到在不破壞反向URL機制的情況下做到這一點的方法。

回答

0

docs

Model.get_absolute_url()定義get_absolute_url()方法來告訴 Django是如何計算規範URL爲一個對象。對於調用者, 此方法應該顯示爲返回一個可用於通過HTTP將對象 指向對象的字符串。

,例如:

def get_absolute_url(self): 
    return "/people/%i/" % self.id 

(雖然這代碼是正確的和簡單的,它可能不是寫這種方法的最 便攜式方式反向()函數是 通常最好的方法)

,例如:

def get_absolute_url(self): 
    from django.core.urlresolvers import reverse 
    return reverse('people.views.details', args=[str(self.id)]) 
+0

但是說我想做'reverse('programme_edit',pk = instance.pk)' – joerick

+0

你可以向你的模型添加你自己的方法,該方法返回帶斜槓的下劃線intead或者你可以使用get_absolute_url(這是不錯,因爲它也適用於管理網站) – yuvi

+0

修改通用視圖以採用此不同ID的最佳方式是什麼? – joerick