3

言語に基づいて静的フォルダーから異なる画像を実装するにはどうすればよいですか? たとえば、メイン サイトにアクセスすると、レイアウトは英語で読み込まれますが、日本語に変更すると、レイアウトに添付されているロゴと画像は、要求された言語に基づいて変更されます。助けてください.....

4

5 に答える 5

4

パラメータをページ テンプレートに渡し、languageそれをメディア ファイル URL の一部として使用できます。

これには、たとえば英語のすべてのメディア ファイルを フォルダ でホストする必要があり、SITE_MEDIA/english他のたとえば日本語の画像は から入手できますSITE_MEDIA/japanese

ページ テンプレート内で、次を使用できます{{MEDIA_URL}}{{language}}/my-image.jpg

于 2012-06-06T10:50:50.430 に答える
0

私がお勧めするアプローチは、基本テンプレート (たとえば page.html など) を用意し、違いについてはそれを拡張することです (つまり、page-fr.html)。

画像を変更する必要がある場合は、テンプレート ブロックがあり、page-fr.html でそのブロックに別の画像を入れることができます。

そうすれば、画像がある場合はさまざまな言語をサポートできますが、翻訳された画像がまだない場合でも、通常のテンプレートが使用されます。言語ごとに異なるテキスト/レイアウトを提供することもできます (必要に応じて、ラベルのレイアウトを変更できる非常に長いテキストを持つ言語もあります)。

次に、ビューで page-[locale].html が存在する場合はそれをロードし (fr-ca などの場合は page-[lang].html にフォールバックできます)、最後に page.html にフォールバックします。存在する場合。

テンプレート page.html:

{% blocktrans %}Some text{% endblocktrans %}
{% block image_one %}<img src='{% static "image_one.png" %}'>{% endblock %}

テンプレート page-fr.html:

{% extends 'page.html' %}
{% block image_one %}<img src='{% static "image_one-fr.png" %}'>{% endblock %}

次に、あなたの見解で:

context = {'data': data}
templates = ['page-fr.html', 'page.html']
return render(request, templates, context) 

page-fr.html を、現在の言語を検索して実行するコードに置き換えます。これを行う単純なテンプレート ローダーを作成することもできます (django アプリにテンプレートがない場合でも驚かないでしょう)。

これには次の利点があります。

  • media_url 結合の代わりに静的タグを使用して、すべての静的ミドルウェアが機能するようにします (ハッシュ化されたファイル名など)。
  • 画像だけでなく、何でもオーバーライドできます
  • 他の手法では、イメージがすべてのロケールに常に存在すると想定していましたが、この手法では、定義した場合にのみ使用され、所有しているイメージがわかっています。たとえば、まだ zh 画像がない場合は、404 を取得する代わりに英語のままにしておくことができます (または、いくつかある場合は、必要なものだけを実行できます)。

ここでは、文字列を結合して最終的なコンテンツを生成する他の回答には反対することをお勧めします。静的コンテンツへの動的 URL を作成しています。持っていない場合に 404 になる可能性のある URL を作成する大きなリスク。また、文字列を結合しても、静的ミドルウェアにアクセスすることはできません (そのため、キャッシュされたハッシュされた URL は長くありません)。ただし、参加後に静的タグを介して最終的な文字列を実行できますが、その静的タグが存在しない場合はサーバー エラーが発生し、さらに悪化します。

于 2018-09-28T10:11:52.713 に答える