Как я могу запустить разные действия из одного представления в Django, нажав две разные кнопки на странице HTML - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть HTML-страница с 2 кнопками. Я хочу открыть одно модальное окно начальной загрузки, в котором я могу загрузить клик для фотографии, нажав кнопку «Фото», и другое окно начальной загрузки для клик-загрузки видео, нажав кнопку «Видео». Я искал в Google, но я не нашел решения.

Я пытался использовать в wiew.py этот код "if 'photo" в request.POST: do somthing "и" if request.POST. get ('Photo') == 'Photo': do somthing "

view.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})

createinstagrampost.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>

urls.py


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

Я обнаружил, что когда я спросил, содержит ли "POST запрос" кнопку "name", он ничего не возвращает.

Кто-нибудь может мне помочь? Это было бы очень полезно.

Большое спасибо за ваше время!

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

Ваш взгляд немного сбит с толку. Когда вы вводите URL-адрес в браузере, он выполняет запрос GET для этого URL-адреса, поэтому вы хотите сначала «прочитать» этот запрос 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 и вернет шаблон. Затем в формах, когда пользователь публикует что-то в этом же представлении, это будет запрос «POST». На этот раз будет выполнен код первого if, и ваша форма будет сохранена

0 голосов
/ 30 сентября 2019

в качестве первого упоминания marciks необходимо добавить method=POST к <form>, чтобы отправить запрос в виде сообщения, и добавить type='submit' к кнопке, принадлежащей:

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

, тогда ваше имя кнопки 'photo' ссимвол нижнего регистра не «Фото». так что попробуйте:

def make_post(request):

    if request.POST.get('photo') == 'Photo':
       . 
       . 
       . 
   else:
       . 
       . 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...