簡體   English   中英

如何在 django 中按 HTML 頁面上的兩個不同按鈕從一個視圖運行不同的操作

[英]How can I run different actions from one view in django pushing two different buttons at HTML page

我有帶有 2 個按鈕的 html 頁面。 我想打開一個引導模式 window 我可以在“照片”按鈕上加載照片點擊,另一個引導程序 window 在“視頻”按鈕上加載視頻點擊。 我在谷歌上找,但我沒有找到解決方案。

我嘗試在 wiew.py 中使用此代碼“如果 request.POST 中的'照片':做 somthing”,以及“如果 request.POST.get('Photo') == 'Photo': do somthing”

視圖.py

def make_post(request):

    if request.POST.get('Photo') == 'Photo':
        if request.method == 'POST':
            form = InstagramPhotoForm(request.POST, request.FILES)
            if form.is_valid():
                form.save()
                return redirect('success_send')
        else:
            form = InstagramPhotoForm()
        return render(request, 'createinstagrampost/createinstagrampost.html', {'photoform' : form})
    else:
        if request.method == 'POST':
            form = InstagraVideoForm(request.POST, request.FILES)
            if form.is_valid():
                form.save()
                return redirect('success_send')
        else:
            form = InstagramVideoForm()
        return render(request, 'createinstagrampost/createinstagrampost.html', {'videoform': form})

創建instagrampost.html


<form>
  {% csrf_token %}
  <div>
    <button class="btn btn-success" type="button" data-toggle="modal" data-target="#modal-1" name="photo" value="Photo"></button>
  </div>
  <br>
  <div>
    <button class="btn btn-success" type="button" data-toggle="modal" data-target="#modal-2" name="video" value="Video"></button>
  </div>
  <br>
</form>

<div class="modal fade" id="modal-1">
  <div class="modal-dialog modal-lg">
    <div class="modal-content">
      <div class="modal-header">
        <h4 class='modal-title'>Make photo post</h4>
        <button class="close" type="button" data-dismiss="modal">&times;</button>
      </div>
      <div class="modal-body">
        <form method="POST" enctype="multipart/form-data">
          {% csrf_token %}
          <fieldset class="form-group">
            {{ photoform|crispy }}
          </fieldset>
          <div class="form-group">
            <button class="btn btn-outline-info" type="submit">Update</button>
          </div>
        </form>
      </div>
      <div class="modal-footer">
        <button class="btn btn-danger" type="button" data-dismiss="modal">Cancel</button>
      </div>
    </div>
  </div>
</div>

<div class="modal fade" id="modal-2">
  <div class="modal-dialog modal-lg">
    <div class="modal-content">
      <div class="modal-header">
        <h4 class='modal-title'>Make video post</h4>
        <button class="close" type="button" data-dismiss="modal">&times;</button>
      </div>
      <div class="modal-body">
        <form method="POST" enctype="multipart/form-data">
          {% csrf_token %}
          <fieldset class="form-group">
            {{ videoform|crispy }}
          </fieldset>
          <div class="form-group">
            <button class="btn btn-outline-info" type="submit">Update</button>
          </div>
        </form>
      </div>
      <div class="modal-footer">
        <button class="btn btn-danger" type="button" data-dismiss="modal">Cancel</button>
      </div>
    </div>
  </div>
</div>

網址.py


urlpatterns = [
    ...
    path('profile/createinstagrampost/', instagram_post.make_post, name='createinstagrampost'),
    path('profile/success/', instagram_post.success_send, name = 'success_send'),
    ...
]

我發現當我詢問“POST 請求”是否包含按鈕“名稱”時,它什么也不返回。

任何人都可以幫我解決這個問題嗎? 那真的很有幫助。

非常感謝您的時間!

正如 marciks 首先提到的,您需要將method=POST添加到<form>以將請求作為 Post 發送並將type='submit'添加到按鈕屬於:

<post method='POST' >
    <button type='submit' ... >
    . 
</form>

那么您的按鈕名稱是“照片”,小寫字符不是“照片”。 所以試試:

def make_post(request):

    if request.POST.get('photo') == 'Photo':
       . 
       . 
       . 
   else:
       . 
       . 

您的觀點有點混亂。當您在瀏覽器中輸入 url 時,它將對該 url 發出 GET 請求,因此您想先“閱讀”此 get 請求:

if request.POST.get('Photo') == 'Photo':
        if request.method == 'POST':
            form = InstagramPhotoForm(request.POST, request.FILES)
            if form.is_valid():
                form.save()
                return redirect('success_send')
        return render(request, 'createinstagrampost/createinstagrampost.html', {'photoform' : form})

由於第一個請求是 GET,它會跳過第一個 if 並返回模板。 然后在 forms 中,當用戶向同一個視圖發布內容時,這將是一個“POST”請求。這一次,第一個 if 中的代碼將運行並且您的表單將被保存

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM