2017-02-22 14 views
0

私は、イベントに添付された画像をアップロードできるサイトを用意しています。この画像は、イベントページのスタンドアロンタイプのレイアウトで表示されます。しかし、私のページがどのように設計されているかのために、私はリストを反復するだけではありません。私は個々のオブジェクトを個別に呼び出す必要があります(単純なリストだけでなく、ページ全体にさまざまな場所に配置しているためです)。インデックス作成は正常に機能しましたが、インデックスの量よりも少ないイベントを開こうとするとエラーが発生します。これを避ける方法はありますか?あるいは誰かに代替ソリューションがありますか?リスト内の各アイテムを個別に呼び出すことができるようにする必要があります。そのため、個々のアイテムの場所とリンク先を個別に設定できます。Django - インデックスエラーを無視しますか?

views.py:

def event_detail(request, slug): 
    Event = Event.objects.get(slug=slug) 
    image1 = Image.objects.filter(event__slug=slug)[0] 
    image2 = Image.objects.filter(event__slug=slug)[1] 
    image3 = Image.objects.filter(event__slug=slug)[2] 
    return render(request, 'events/event_detail.html', { 
     'event': event, 
     'image1': image1, 
     'image2': image2, 
     'image3': image3, 

}) 

その後、私は今、3(またはそれ以上)の画像をサポートするように設定されます

など{{image1.url}}を持つオブジェクトを呼び出すが、イベントに添付されている画像が3枚未満の場合、エラーが発生します。

誰かがアイデアを持っているならば、これをモデル化するための非常に多くの方法があります。

答えて

1

@karthikrが

def event_detail(request, slug): 
Event = Event.objects.get(slug=slug) 
images = Image.objects.filter(event__slug=slug)[:3] 
return render(request, 'events/event_detail.html', { 
    'event': event, 
    'images': images}) 

に言及し、あなたがやっによって個別に呼び出したい場合は、htmlページでは、索引付けて画像を呼び出すことができるようあなたは、htmlページにイメージしてイベントを送信することができます。

{{ images.0.url }}{{ images.1.url }}

テンプレートでのインデックスを使用して。テンプレートに指定された数の画像があることが確かな場合

+0

これはうまくいった!ありがとう! – Josh

3

インデックスを作成してクエリーセットを評価しているために問題が発生します。クエリーセットに3つの画像がないと、それは当然失敗します。あなたができる

ことの一つは、少し異なるそれを処理、次のとおりです。

def event_detail(request, slug): 
    Event = Event.objects.get(slug=slug) 
    images = Image.objects.filter(event__slug=slug)[:3] 
    return render(request, 'events/event_detail.html', { 
     'event': event, 
     'images': images 
}) 

今あなたができる:

{% for image in images %} 
    {% image.url %} 
{% endfor %} 

この方法で、[:3]は「安全」クエリセットをスライスだろう、とテンプレートimagesクエリーセットに存在するオブジェクトのみをレンダリングします。

編集:

あなたが探している2のセットに対応するために

、あなたができるもう一つの事は次のとおりです。

def event_detail(request, slug): 
    Event = Event.objects.get(slug=slug) 
    image_set_1 = Image.objects.filter(event__slug=slug)[:2] 
    image_set_2 = Image.objects.filter(event__slug=slug)[2:4] 
    image_set_3 = Image.objects.filter(event__slug=slug)[4:6] 
    return render(request, 'events/event_detail.html', { 
     'event': event, 
     'image_set_1': image_set_1, 
     'image_set_2': image_set_2, 
     'image_set_3': image_set_3, 
}) 

は今、このスライスは「安全」であるので、あなたが好きな場所あなたはそれをレンダリングすることができます。

+0

モデルを使用してリスト全体ではなく特定の画像を呼び出す方法はありますか?たとえば、イメージ1と2をページの上部に、3と4を左に、5と6を下部に表示したいとします。すでにリストに反復されているイメージを示す方法はありますか? – Josh

+1

テンプレートのリストをスライスすることを検討しましたか? https://docs.djangoproject.com/en/1.10/ref/templates/builtins/#slice – karthikr

+0

残念ながら、それは私が探していることをしません。私は別々の場所に置くことができるように、個別に画像を呼び出すことができる必要があります。それが不可能なら、私は私のデザインを再評価し、うまくいくものを見つけるだろうと思う。 – Josh

関連する問題