在 Django 中以 html 模式加载动态数据

Posted

技术标签:

【中文标题】在 Django 中以 html 模式加载动态数据【英文标题】:load dynamic data in html modal in Django 【发布时间】:2021-03-30 02:46:14 【问题描述】:

我在 Django 中有一个带有来自数据库的动态图像的 html 页面。 我在同一页面中也有一个模式设置为不可见,并在单击图像时打开。

我的意图是当我单击任何图像时,它应该打开一个带有单击图像的 html 模型及其来自 db 的描述文本。

如何显示当前点击图片的数据及其描述。 我试图传递profile.image.url,但这提供了一个关于点击所有图像的信息。

我不必为此提供示例代码。

【问题讨论】:

【参考方案1】:

您可以通过传递要使用 AJAX 请求检索的对象的 id 来实现此目的。

假设这是你的 HTML 表格

<table class="table">
  <thead>
    <tr>
      <th>Id</th>
      <th>Title</th>
      <th>Date</th>
      <th>Status</th>
      <th>Actions</th>
    </tr>
  </thead>

  <tbody>
    % for incident in page_obj %
      <tr>
        <td> incident.id </td>
        <td> incident.title </td>
        <td> incident.created </td>
        <td>
          <span class="badge badge-pill badge-success"> incident.get_status_display </span>
        </td>
        <td>
          <button class="btn btn-sm btn-outline-info" onclick="populateForm(' incident.id ')" data-toggle="modal" data-target="#incidentModal">Edit</button>
        </td>
      </tr>
    % endfor %
  </tbody>
</table>

根据你的模型和字段使用这种类型的函数

 function populateForm(id) 
    $.ajax(
      url: "% url 'incidents:update' 1 %".replace("1", id),
      type: "GET",
      success(response) 
        let incident = JSON.parse(response)[0].fields;
        $("#id_title").val(incident.title);
        $("#id_description").val(incident.description);
        $("#id_responder").val(incident.responder);
        $("#id_status").val(incident.status);
        $("#id_functional_impact").val(incident.functional_impact);
        $("#id_information_impact").val(incident.information_impact);
        $("#id_recovery_impact").val(incident.recovery_impact);
      ,
    );
  

views.py

from django.core import serializers
from django.http import JsonResponse, Http404
from django.views.generic import UpdateView
from incidents.models import Incident
from incidents.forms import IncidentForm


class IncidentUpdateView(UpdateView):
    form_class = IncidentForm
    model = Incident

    def get_success_url(self):
        return reverse('incidents:list')

    def get(self, request, pk):
        if request.is_ajax():
            incident = get_object_or_404(Incident, pk=pk)
            response = serializers.serialize("json", [incident])
            return JsonResponse(response, safe=False)
        raise Http404('Page not found')

【讨论】:

嗨!好答案!我有同样的问题。我有一个用户网格和每个用户的删除按钮。我想在按下此按钮时打开一个模式,说“您确定要删除用户“用户名”吗?所以在确认我要删除用户时。我无法在网格中“存储”选定的用户”并将其传递给不使用ajax的模态?谢谢***.com/questions/66028775/… 您好,很抱歉回复晚了。您可以将 javascript 函数附加到按钮的 onclick 方法,并将其中的用户 ID 作为参数传递。在该函数中,您可以使用用户 ID 设置删除表单的操作。因此,每当用户单击“删除”按钮时,该功能将更改表单的操作并出现一个模式,并在确认它将提交最终导致用户被删除的表单。希望对您有所帮助。【参考方案2】:

有两种方法可以实现这一点:

    使用 django 为所有图像呈现模态,并在用户单击其中一张图像时打开它们。 创建 1 个模态并编写一些 javascript 以在后台获取有关单击图像的信息。请注意,您还需要在 Django 中创建一个端点,该端点将接受图像 ID 并返回图像信息。

【讨论】:

以上是关于在 Django 中以 html 模式加载动态数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在android应用程序中以在线和离线模式加载或检索网页?

Django html重定向但不加载页面

Rails 和 JQuery-将 DB 数据加载到文本字段中以进行保存和删除

CSS 位置问题:在 iOS 9 iPhone 6+ 中以横向模式修复

django 在向后迁移/ loaddata 后从夹具加载数据使用的是模型模式而不是数据库模式

如何在 Django 中以升序和降序显示数据?