0

私はDjangoを初めて使用します。名前とURLパターンに基づいて画像を表示するのに問題があります。

したがって、基本的にURLはその中のいくつかの変数で構成されており、それらの変数で名前が付けられた特定の画像をフェッチするためにそれを使用できるようにしたいと思います。

例:

localhost:8080/farm/chicken

これにより、 .. / static / images /フォルダー内の画像がフェッチされ、次のようになります。

farm_chicken.jpg

もう一つの例:

localhost:8080/zoo/alligator

なるだろう:

zoo_alligator.jpg

URLパラメータを取得できます。したがって、views.pyファイル内にこれらの画像名を作成し、名前(zoo_alligator)をコンテキストに渡して、後でテンプレートによって取得する必要がありますか?これは正しい方法でしょうか?

みなさん、アドバイスありがとうございます!私はすべての助けに感謝します!

4

2 に答える 2

2

一般的に、実際にはそのようなことはしません。あなたがすべきことは、画像をコンテキスト変数としてビュー関数からテンプレートに送信することです。

表示する画像を決定するためにURLノードを使用している場合、対応するビュー関数では、実際には「ワニ」または「チキン」を使用して対応するAnimalクラスをロードしています。

正しいanimalオブジェクトがインスタンス化されたら、この動物オブジェクトをdjangoテンプレートに送信し、次のようなスニペットを使用して画像を読み込むことができます。-

このような:-

{% if animal.get_latest_medium_url %}
    <img id="animal_image" class="img-rounded left" src="/media/{{ animal_image }}" />
{% endif %}

これget_latest_medium_urlは私のメソッドでMerchant classあり、そこでURLを計算します。

于 2012-11-05T01:40:56.197 に答える
1

では、views.py ファイル内でこれらの画像名を作成し、名前 (zoo_alligator) をコンテキストに渡して、後でテンプレートによって取得する必要がありますか? これは正しい方法でしょうか?

確かに、これはそれを行う 1 つの方法です。このようなもの:

(r'show/(?P<in_path>.*)$','someapp.image_view')

次にimage_view

def image_view(request,in_path):
    img = in_path.replace('/','_')+'.jpg'
    return render(request,'some_template.html',{'path':img})

urls.pyただし、ビューは非常に単純であるため、次を使用して、からテンプレートにパスを直接渡すことができますdirect_to_template

from django.views.generic.simple import direct_to_template

(r'show/(?P<in_path>.*)$',direct_to_template,{'template':'some_template.html'})

some_template.html

<img src="{{ params.in_path }}">

問題は、デフォルトのフィルターには「置換」機能がないため、文字列の書式設定が完了しないことです。カスタム フィルターを簡単に作成できます。

@register.filter
@stringfilter
def format_path(the_path):
    return the_path.replace('/','_')+'.jpg'

次に、テンプレートを変更します。

<img src="{{ params.in_path|format_path }}">

django が確実に見つけられるようにフィルター コードを格納する場所などの詳細については、カスタム フィルターとタグの作成に関するドキュメントを参照してください。

于 2012-11-05T02:43:05.790 に答える