javascript - 在 Django 中单击时更新包含项目详细信息的页面

标签 javascript jquery python ajax django

我是 ajax 新手,知道我需要使用它来完成我想要做的事情,但似乎无法弄清楚。

我有一个公司列表,我想当他们单击表行时在页面上显示有关公司的详细信息。当用户单击不同的行时,我希望详细信息更改为单击的新公司的详细信息。

HTML:

{% block content %}
  <div class='container'>
    <h3>Hello, </h3>
  </div>
  <div class='col-md-6'>
    <div class='panel panel-primary'>
      <div class='panel-heading'>
        <h3 class='panel-title'>Call List</h3>
      </div>
      <div class='panel-body' style="max-height: 70em ;overflow-y: scroll;">
        <table class="table table-striped table-hover ">
          <thead>
            <tr>
              <th>Company Name</th>
              <th>Other Information</th>
            </tr>
          </thead>
          <tbody>
            {% for item in companies %}
              <tr onclick='UpdatePKFunction({{ item.pk }})'>
                <td>{{ item.CompanyName }}</td>
                <td>{{ item.LineOfBusiness }}</td>
              </tr>
            {% endfor %}
          </tbody>
        </table>
      </div>
    </div>
  </div>
  <script>
    function UpdatePKFunction(pk) {
      pk = pk
      $.ajax({
        url: '/updateDetails',
        success: function(pk) {
          $('#DetailView').html(pk);
        }
      });
    };
  </script>
  <div class='col-md-4'>
    <div class='panel panel-info'>
      <div class='panel-heading'>
        <h3 class='panel-title'>Company Information</h3>
      </div>
      <div class='panel-body' id='DetailView'>
      </div>
    </div>
  </div>
{% endblock %}

我要插入的内容:

{% for item in companies %}
  {% if item.pk == pk %}
    <td>
      <tr>item.CompanyName</tr>
    </td>
  {% endif %}
{% endfor %}

查看.py

from django.shortcuts import render
from django.http import HttpResponse

from mainlist.models import hoovers_companies

# Create your views here.
def index(request):
    companies = hoovers_companies.objects.all()
    company = hoovers_companies.objects
    return render(request, 'mainlist/index.html', {'companies': companies, 'company': company})

def updateDetails(request):
    companies = hoovers_companies.objects.all()
    return render(request, 'mainlist/updateDetails.html', {'companies': companies, 'pk': 1})

url.py

from django.conf.urls import url
from . import views

urlpatterns = [
        url(r'^updateDetails', views.updateDetails, name='updateDetails'),
        url(r'^$', views.index, name='index'),
]

任何帮助或指出正确的方向将不胜感激!

最佳答案

我能够找到我的问题的答案,并想将其发布在这里,以防它对任何人有帮助。

*请注意:请勿将此方法用于任何敏感或私有(private)信息。这是一个简单的 GET 请求,所有信息都可以在 URL 中看到。

首先,在我想要显示信息的模板中,我将单击项目的主键传递给了我的函数。

<ELEMENT onclick='UpdatePKFunction({{ item.pk }})'>

然后我将此函数放入我的模板中。 #DetailView 引用了我想要放置动态内容的空 div 的 id。这允许我将所选项目的主键作为 URL 参数传递到 View 。

<script>
  function UpdatePKFunction(pk) {
    pk = pk
    $.ajax({
      url: 'updateDetails/' + pk,
      success: function(data) {
        $('#DetailView').html(data);
      }
    });
  };
</script>

请参阅下面的 urls.py 文件,了解它如何捕获主键 (pk) 并将其传递给 views.py。它从 views.py 传递给模板。

# urls.py

urlpatterns = [
url(r'^updateDetails/(?P<pk>.+?)/$', views.updateDetails, name='updateDetails'),
url(r'^$', views.index, name='index'),
]


# views.py

def updateDetails(request, pk):
    company = companies.objects.get(pk=pk)
    return render(request, 'mainlist/updateDetails.html', {'company': company, 'pk': pk})

完成此操作后,只需创建一个新模板,其中包含您开始使用的空 div 内所需的任何 html。我的模板是 mainlist/updateDetails.html

关于javascript - 在 Django 中单击时更新包含项目详细信息的页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42771828/

相关文章:

jquery - 检查 jquery 中的值是 float 还是 int

python - 在启动时启动 python 脚本 - Raspbian

javascript - 在 jquery 中查找非兄弟 child 的下一个实例?

javascript - 如何读取视频标签中的所有视频类型

javascript - 使用继续单击事件继续在 jquery 中移动表

javascript - 密码确认验证未按预期显示

python - 导入 Keras 会引发 numpy 异常

python - 如何在没有浏览器仿真或 headless 浏览器的情况下从 python 脚本在网页中调用 ajax?

javascript - 如何仅通过某些对象填充 Ember.js 的 Select?

javascript - 显示在复选框树中选择的选项