5

我有一個模型,我想要顯示爲Detail視圖,我創建了一個鏈接導致其詳細視圖的列表視圖。我沒有得到任何錯誤,但模板不提供任何模型細節 的鏈接的DetailViewDetailView模板不顯示模型數據

<a href="../ancillaries/{{ Ancillary.id }}" > Product </a> 

型號

from django.db import models 
from django.core.urlresolvers import reverse 

class Ancillary(models.Model): 
    product_code = models.CharField(max_length=60, null=True) 
    type = models.CharField(max_length=120, null=True) 
    product = models.CharField(max_length=120, null=True) 
    standard = models.CharField(max_length=120, null=True) 
    measurement = models.CharField(max_length=120, null=True) 
    brand = models.CharField(max_length=120, null=True) 

    class Meta: 
      verbose_name_plural = "Ancillaries" 
    def get_absolute_url(self): 
      return reverse('ancillaries') 
    def __unicode__(self): 
      return u'%s %s %s %s %s %s %s' % (self.id, self.product_code, self.type, 
           self.product, self.standard, 
           self.measurement, self.brand) 

查看

class AncillaryDetail(DetailView): 
    model = Ancillary 
    def get_context_data(self, **kwargs): 

     context = super(AncillaryDetail, self).get_context_data(**kwargs) 

     context['ancillary_list'] = Ancillary.objects.all() 
     return context 

的url

url(r'^ancillaries/(?P<pk>\d+)/', AncillaryDetail.as_view(template_name='ancillary-detail.html')), 

模板

{% for ancillary_list in object_list %} 
{{ Ancillary.product}} 
{{ Ancillary.type }} 
{{ Ancillary.brand }} 
{{ Ancillary.measurement }} 
{% endfor %} 
+0

上面的模板看起來像一個列表視圖。你使用什麼樣的模板來處理細節視圖,爲什麼要將所有對象都添加回細節上下文中? – AndrewS

+0

哦,不,上面的模板是我用於細節視圖的。我不知道用什麼模板來顯示詳細視圖數據。 – vvdect

回答

12

看起來好像你已經使用了documentation,但錯誤地修改了ListView示例。如果你想顯示一個模型實例,那麼DetailView是正確的視圖。

正如@mrkre建議你應該命名你的URL模式(儘管我將使用單數形式的名稱)。

url(r'^ancillaries/(?P<pk>\d+)/', AncillaryDetail.as_view(
       template_name='ancillary-detail.html'), name="ancillary_detail") 

的看法是後來乾脆

class AncillaryDetail(DetailView): 
    model = Ancillary 

ancillary-detail.html您使用默認名稱object訪問模型實例的模板。

{{ object.product}} 
{{ object.type }} 
{{ object.brand }} 
{{ object.measurement }} 
+0

在下面的答案中查看Berislav Lopac的評論,我相信它也適用於這個答案。「\t 」我只想補充一點,你應該避免將template_name放入URLconf中,而是將它放在AncillaryDetail的定義中,就在model屬性的下面。「 – IonicBurger

4

嘗試:

{% for ancillary in ancillary_list %} 
    {{ ancillary.product}} 
    {{ ancillary.type }} 
    {{ ancillary.brand }} 
    {{ ancillary.measurement }} 
{% endfor %} 

我會建議使用的名字爲網址:您的DetailView後

url(r'^ancillaries/(?P<pk>\d+)/', AncillaryDetail.as_view(), name="ancillary_details") 

<a href="{% url 'ancillary_details' pk=ancillary.pk %}"> 

將這一權利

template_name='ancillary-detail.html' 
+4

我只是補充一點,你應該避免把'template_name'放在URLconf中,而是把它放在'model'屬性下的'AncillaryDetail'的定義中。 –

+0

我同意,我也是這麼做的。編輯答案。 – mrkre

+0

@BerislavLopac - 這是不是允許更多的控制在類似的方式,Flask做它的URL /模板?換句話說,允許一對一映射? – IonicBurger