5

詳細ビューとして表示するモデルがあります。詳細ビューにリンクするリストビューを作成しました。私はすべてのエラーを取得いけないが、テンプレートはDetailView詳細ビューテンプレートにモデルデータが表示されない

<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

後にそれはあるかのように見えますを使用しましたでは、ListViewの例を誤って変更しました。単一のモデルインスタンスを表示する場合は、DetailViewが正しいビューです。

@mrkreはURLパターンに名前を付けるべきです(名前には単数形を使用します)。あなたはデフォルトの名前objectを使用してモデルインスタンスにアクセスancillary-detail.html

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

ビューは、単純に、テンプレートで

class AncillaryDetail(DetailView): 
    model = Ancillary 

です。

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

下記の答えにBerislav Lopacのコメントを見る、私はこの答えにも当てはまると信じている。\t "テンプレート名をURLconfに入れないでください。むしろモデル属性のすぐ下のAncillaryDetailの定義に入れてください。" – IonicBurger

4

試してみてください。

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

は、私は、URLの名前を使用することをお勧めします:

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

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

置き、この右のあなたのDetailView

template_name='ancillary-detail.html' 
+4

'template_name'をURLconfに入れないでください。' model'属性の直下にある 'AncillaryDetail'の定義に入れてください。 –

+0

私は同意します、それも私がやっていることです。編集された答え。 – mrkre

+0

@BerislavLopac - これは、Flaskと同様の方法でurl /テンプレートをより詳細に制御できないのですか?言い換えれば、1対1のマッピングを可能にするか? – IonicBurger

関連する問題