2016-08-10 59 views
0

Django的1.10傳遞從模型額外的選項來查看

我創建了一個wiki模式。 wiki文章將附加到不同的類型的對象。以下是我試圖將維基附加到Masterphoto對象的示例。稍後,維基將被附加到Person實例或其他東西。那麼,維基應該是可以附加到任何事情上的。

在Masterphoto中,方法get_create_wiki_url很高興地向url調度器發送額外的選項。

那麼,我失敗了。

如果我這樣做:URL(R '^維基/製作/ $',WikiCreate.as_view(),名稱= 'wiki_create'),然後我得到:

Reverse for 'wiki_create' with arguments '()' and keyword arguments '{'model': 'masterphoto', 'pk': 4}' not found. 1 pattern(s) tried: ['wiki/create/$'] 

這工作:網址(r'^ wiki/create/$',WikiCreate.as_view(),name ='wiki_create',kwargs = {'model':'masterphoto','pk':4}),

但是這太荒謬了。

你能在這裏給我一個踢嗎?換句話說,如何從Master照片傳輸額外的選項到wiki_create視圖?

維基/ models.py

class Wiki(models.Model): 
    related_model = models.CharField(max_length=100, blank=False, null=False, default="") 
    related_object_id = models.CharField(max_length=100, blank=False, null=False, default="") 
    article = models.TextField(blank=False, null=False, default="") 

masterphoto/models.py

class Masterphoto(models.Model): 
    ... 
    def get_create_wiki_url(self): 
     return reverse('wiki_create', kwargs = {'model': self._meta.app_label, 'pk': self.id}) 

urls.py

urlpatterns = [ 
    url(r'^wiki/create/$', WikiCreate.as_view(), name='wiki_create', kwargs=None), 
] 

回答

0

您需要在你的url定義中使用命名組來捕獲url的特定部分,並將它們作爲kwargs傳遞給視圖(documentation)。在你的情況下這樣的事情應該工作:

urlpatterns = [ 
    url(r'^wiki/create/(?P<model>\w+)/(?P<pk>\d+)/$', WikiCreate.as_view(), name='wiki_create'), 
] 
+0

我不喜歡命名組在這種情況下。原因:網址看起來很糟糕。我只是不明白爲什麼我不能在這種情況下使用額外的選項。我是否正確理解您無法傳輸額外選項? – Michael

+1

不使用'reverse',no。 'reverse'中的'args'映射到url模式的組中,'kwargs'映射到url模式中的命名組;沒有辦法通過'reverse'發送額外的選項。我想你必須使用例如會話變量,如果你不希望這些參數出現在你的網址。 – rafalmp