2011-08-04 7 views
0

私はこのコードをahve、問題は画像の名前がありますが、ファイルが存在しない名前に対応している、どのように画像が表示されているかを知ることができる、そんな感じ。イメージがWebページにレンダリングされるかどうかを知るにはどうすればよいですか? (djangoのテンプレート)

<img src="{{ STATIC_URL }}images/{{web.image}}" /> 

上記のコードは、私のdjangoイメージをテンプレートにレンダリングするために使用します。おかげさまで

+0

回答をもう一度確認したいかもしれません。 –

答えて

0

最後に、私はSORLサムネイルを使用して解決策を見つけた:http://thumbnail.sorl.net/examples.html#template-examples

{% thumbnail item.image my_size_string crop="left" as im %} 
    <img src="{{ im.url }}"> 
{% empty %} 
    <p>No image</p> 
{% endthumbnail %} 

それは私のために動作します。

0

{{STATIC_URL}} images/{{web.image}}から展開されたURLが404 Not Foundエラーになっていますか?そして、あなたはこれをやっているのを理解したいですか?

あなたは実際には、いくつかのpythonコード(何かurllibのものかもしれません)を使ってビュー内のURLをテストする必要がありますが、そのURLがビューを実行しているサーバーと同じサーバー上にある場合、

+0

はい、同じサーバー上のURLです。 –

+0

URLによるテストは、イメージがサーバー上にあるべき完全なパスを知っていれば悪いことです...他の回答を参照してください – Spacedman

0

テンプレートが実際にファイルが存在するかどうかを判断することは非常に困難です。 {{web.image}}が実際に何かを最初に返すと仮定すると、それはビューの仕事になります。

def my_view(request): 
    # some code here 
    import os 
    if os.path.exists(web.image_path): # for example 
     context = { 'web': web } 
    render_to_response('my_template.html', context, RequestContext(request) 

これは、イメージファイルへの完全なファイルシステムパスが実際にわかっていることを前提としています。これは必ずしもそうではありません。特にdjango 1.3のstaticfilesアプリではそうです。

しかし、画像が存在することがあり、時にはそうでないことがさらに懸念されます。それはなぜですか?画像は何らかの理由で削除されていますか?そうであれば、データベースをクリーンアップする方法が必要です。

編集:

まだあなたはこの試してみてください、あなたが好きな答えがあるようには思えないので:あなたは次の操作を行い、あなたのテンプレートで

import os 
class MyModel(models.Model): 
    image = models.Image... 
    # the rest of your fields 

    def get_image_url(self): 
     if os.path.exists(self.image.path): 
      return u'/%s/img/%s' % (self.app_label, self.image.filename) 
     return u'%s/img/default.jpg' % self.app_label 

を:

<img src="{{ STATIC_URL }}{{ web.get_image_url }}" /> 
+0

いいえ問題は、私は200画像と言うフォルダがあり、データベースフィールドには、私は残りの40の画像のための160のような名前を持っている私はデフォルトの画像を表示したい、テンプレートにクイックフィックスをいくつか追加したいのですが、それは多くのリソースを必要としません。 –

+0

次に、pythonファイルユーティリティを使用してfoo-12345.pngが存在するかどうかをチェックし、そうでなければdefault.pngにイメージパスを設定し、そのイメージを持っている必要があります。 – Spacedman

+0

テンプレートがファイルシステムに直接アクセスできないため、これをテンプレート内で修正することはできません。ビューに、あるいはおそらくテンプレートタグにコードを書く必要があります。 – Spacedman

1

私はクライアント側で、javascriptを使用して、Googleのようなものを "javascript image loaded"などの形で実行します。ウェブは、実際に(あなたのコメントが指摘しているようだとして)あなたがアクセスしているデータベースオブジェクトで、「画像」のImageFieldであるとした場合、あなたは以下を使用することができ

0

{% if web.image %} 
    <img src="{% web.image.url %}" /> 
{% else %} 
    <img src="{{ STATIC_URL }}images/MyDefaultImage.png" /> 
{% endif %} 

この方法では、テンプレートは存在する場合のみイメージを提供し、存在しない場合は代替イメージを提供します。

あなたの質問に誤解があった場合は、事前にお詫びします。すべてを正しく理解しているかどうかはわかりません。

+0

あなたの努力に感謝していますが、間違ったことはすべてのweb.imageに有効な名前がありますが、すべての有効な名前には画像ファイルがありません。 {%if web.image%}は常にtrueを返します。 –

+0

あなたは問題を解決するために少しハックを実装しようとしていますか、それとも長期的な解決策ですか?つまり、新しい壊れたリンクを計画していますか?そうでない場合は、ファイルが存在し、if.notが存在しないかどうかをチェックする基本的なスクリプトを書いて、データベースへの参照を削除するほうがよいでしょう。 –

+0

問題を解決するために小さなハックを実装しようとしています。今はデータベースに触れたくありません。 –

関連する問題