2

私は django で Web サイトを作成しました。ほとんどの場合、いくつかの単純なアプリを使用して、ユーザーの小さなチームがイベントを追加したり、アップロードされたファイルを表示するページを管理したりできます。最も複雑な部分は、各ユーザーがコンテンツを含むホームページを持っていることです。 MarkupField (私はhttps://github.com/jamesturk/django-markupfieldのものを使用しています) と、コンテンツも制御する一連のサブページを介して自分自身を管理します。

私の問題は、画像やファイルをアップロードし、ページでこれらを簡単に参照して、画像を含めたり、ファイルへのリンクを作成したりする方法です。アップロードは問題なく、ImageField が配置されている場所がわかっている場合は画像/ファイルを静的に参照できますが、理想的には、ユーザーは django が実際にファイルを保存する場所や静的に提供される場所について何も知る必要はありません。 . これまでの私の最高のアイデアは次のとおりです。

  1. UserPage を ForeignKey としてファイル/画像アップロード モデルを作成する
  2. ユーザーが各ページに好きなだけ画像やファイルをアップロードできるようにする
  3. MarkupField を変更して、最初にテキストを解析し、いくつかの新しい構文 (たとえば、ページに関連付けられた最初にアップロードされた画像を参照するための「&&IMAGE_1」など) を、参照された画像フィールドが実際に格納する場所の正しい静的 URL に置き換えます。

これの欠点は、独自の小さな構文を発明していて、それを確実に解析する必要があることです。それはそれほど難しいことではありませんが、同じことを達成するための既存の方法、または検討する価値のある代替アプローチはありますか? django フレームワーク内でそれを行うためのより自然な方法が少なくとも欠けているかどうかはわかりません。

4

1 に答える 1

1

いいスタートを切れたようですね。

あなたが気づいていないように思われるいくつかのこと:

  • FileField とそのサブクラス ImageField には.urlプロパティがあります。
  • MarkupField をバニラのままにしたい場合は、モデルの save()メソッドをオーバーライドして、追加の構文を追加できます。

私の解決策は、テンプレートに javascript が設定された画像のリストを返すようにして、ユーザーに自分の画像のリストを表示し、1 つをクリックして彼女が書いているものに追加できるようにすることです。私はこの種の作業にjqueryを使用するのが好きですが、純粋な JavaScript で行うこともできます。リストは、ユーザーが「画像を追加」ボタンをクリックしたときに表示されるか、画像追加構文を入力し始めたときに自動的に表示されるか、またはその両方です。また、サムネイルを自動的に生成し、モデルに .thumbUrl を追加して、ユーザーがサムネイルから画像を選択できるようにします。

したがって、アイデアは次のようなものです。

function addImgMarkup(imgUrl){
    $('#idOfMarkupTextFormField').val($('#idOfMarkupTextFormField').val()
+ 'imageSyntax' + imgUrl); }

jquery document.ready 関数で、および

{% for uplImg in UserPage.uploaded_image__set.all %}
<a href="#" onclick="addImgMarkup({{uplImg.url}})">
    <img src="{{uplImg.thumbUrl}}" alt="{{uplImg.name}}"></img>
</a>
{% endfor %}

htmlで。

これについて説明が必要な場合はお尋ねください。

于 2013-06-10T01:07:16.643 に答える