0

HTMLテンプレートからファイルをアップロードすることを検討しています。FileFields、ImageFieldsなどを含むかなりの量のドキュメントを見てきました。しかし、理想的には、コードを書き直したくありません。現在、テンプレートに簡単なフォームがあり、そこにアップロード機能が必要です。ここで、画像がアップロードされ、アプリケーションのメディアフォルダーに保存され、可能であればデータベースに追加されます。

私はおそらく長くて複雑なルートをたどったことを知っていますが、誰かが助けてくれるならそれは素晴らしいでしょう!

html.py:

<div class="row">                 <div class="span1 offset5">                 </bR>
              <form class="form-horizontal" method="get" action="/add/submit" value="add">  
              <fieldset>              <div class="input">
              <div class="inline-inputs">
              <label>Ride Name:</label><input type="text" name="name">
              <label>Type:</label><input type="text" name="type">
              <label>Theme:</label><input type="text" name="theme">
              <label>Description:</label><textarea rows="5" name ="description"></textarea>
              <label>Author:</label><input type="text" name="author">

              <label>Date Released:</label>
              <div id="datetimepicker" class="input-append date">
                  <input type="text" name="date"></input>
                  <span class="add-on">
                  <i data-time-icon="icon-time" data-date-icon="icon-calendar"></i>
                  </span>
              </div>                      
              <label>Thread:</label><input type="text" name="thread">
              <label>Video</label><textarea rows="2" name ="video"></textarea>


                  <br><br>
                  <input class="btn btn-primary" type="submit" value="Add" />
                  </div>              </div>                      

               </fieldset> 
              </form>  
              </div>  </div>

現在、私のViews.pyは、入力されたデータを取得してデータベースに挿入するだけです。ファイルをアップロードする機能を追加したい:

def Ride_Add_Submit(request):
    name = request.GET['name']
    type = request.GET['type']
    theme = request.GET['theme']
    description = request.GET['description']
    author = request.GET['author']
    releasedate=request.GET['date']
    video=request.GET['video']
    thread=request.GET['thread']


    entry = RollerCoaster(name=name, type=type, theme=theme, description=description, releasedate=releasedate, author=author, video=video, thread=thread)
    entry.save()
    return TemplateResponse(request, 'Ride_Add.html')
4

1 に答える 1

4

ここでテンプレートについて話し続ける理由がわかりません。テンプレートは何の関係もありません。アップロードの処理は、すべてのロジックと同様に、ビューで行われます。

ファイルアップロードの概要には、必要なすべての情報が含まれています。Djangoフォームに関する部分を無視して、それが有効かどうかを確認し、ファイルオブジェクトをアップロード処理関数に渡すだけです。このページでも説明されています。

ただし、フォーム要素がGETではなくPOSTを使用するようにテンプレートを変更する必要があります(これはとにかくほぼ確実に良いアイデアです)enctype="multipart/form-data"。また、そのページで説明されているように使用します。

最後に、ModelFormsを使用するようにコードを書き直すことをお勧めします。コードがはるかに単純になるだけでなく、エントリを検証して、すべての必須フィールドが存在し、正しいタイプであることを確認するなどの処理を行います。また、有効なHTMLを出力します(たとえば、 'タグforに属性がありません)。label

于 2013-02-25T14:04:06.577 に答える