首页 > 解决方案 > 在 Django 中传递数据表单

问题描述

我在如何根据我的 html 中的选定行按钮将数据传递html到其中时遇到问题,views.py我也想通过POST。正如您所见,传递数据的触发器是通过Open我一直在使用的按钮href。是有什么技巧或想法如何使用表单等传递数据?如果有人能弄清楚我在哪里做错了,那就太好了。非常感谢你

这与此问题链接类似

在此处输入图像描述

示例.HTML

  <div class="row">
    {% csrf_token %}
      {% for folder in folder_list %}
          Folder title: <span id="titles" name="titles" >{{folder.title}}</span></p>
          Date upload: <span  id="date_upload" name="date_upload">{{folder.date_upload}}</span>

          <a href="{% url 'view_gallery' %}" name="idd" value="{{ folder.id }}">Open</a>
      {% endfor %}
  </div>

视图.py

@login_required(login_url='log_permission')
def view_gallery(request):
    if request.method == 'POST':
       print("makibaoh")
       idd = request.POST.get('idd')
       title = request.POST.get('title')
       date_upload = request.POST.get('date_upload')
       image = gallery_photos.objects.filter(gallery_info_id = idd)
       data = {'photos':image} 
       return render(request, 'view_gallery.html', data) 

标签: pythonhtmldjango

解决方案


是否有任何技巧或想法如何使用表单等传递数据?

如果我理解正确,您想使用formbuta标记。

尝试这个:

<div class="row">
    {% csrf_token %}
      {% for folder in folder_list %}
          Folder title: <span id="titles" name="titles" >{{folder.title}}</span></p>
          Date upload: <span  id="date_upload" name="date_upload">{{folder.date_upload}}</span>

          <form action="{% url 'view_gallery' %}" method="POST" id="form1">
               <!-- This input won't be show -->
               <input type="text" idd={{folder.id}} style="display:none"> 
               <button type="submit">Open</button>
          </form>
      {% endfor %}
  </div>

然后,当您点击Open按钮时,POSTview_gallery使用 params为 url 设置一个方法idd=123。(example.com/view_gallery?idd=123

然后它将起作用。

但我强烈建议您像这样组织 URL:

  • 像这样声明 <a> 标签:
<a href="{% url 'view_detail_gallery' folder.id %}">
  • 将您的 URL 模式更改为:example.com/view_gallery/:id。声明一个新的模式 URL:
path('gallery/<int:id>/', view_detail_gallery, name = 'gallery_detail'),
  • 在 中声明一个新视图views.py
@login_required(login_url='log_permission')
def view_detail_gallery(request, id):
    if request.method == 'GET':
       image = gallery_photos.objects.filter(gallery_info_id = id)
       data = {'photos':image} 
       return render(request, 'view_detail_gallery.html', data) 

您可以创建detail或不创建新的 HTML,因为正如我所见,您没有这样做并且您的代码仍在工作(希望如此)。


推荐阅读