【问题标题】:URL Patterns and ViewsURL 模式和视图
【发布时间】:2018-05-29 17:38:08
【问题描述】:

我有一个基于某些参数请求数据的应用程序。我使用两个函数来处理请求,然后从响应中创建两个对象。我能够单独遍历每个对象并在我的网页上显示特定对象的数据,但是当我尝试同时使用这两个函数时,只有一个函数会遍历该对象。我的理解是这个问题与 URL 模式有关,但我不知道最好的方法是什么。您将在下面找到我的 urlpatterns、我的函数以及我用来访问视图的 HTML。

urls.py

urlpatterns = [
   path('', views.customer, name='customer'),
   path('', views.information, name='information'),
]

views.py

def customer(request):
    for i, contact in enumerate(contactObj):
        try:
            contacts = contactObj
            context = {'contacts': contacts}
        except KeyError:
            print()
        return render(request, 'uccx/home.html', context)

def information(request):
    for i, ticket in enumerate(ticketObj):
        try:
            tickets = ticketObj
            context = {'tickets': tickets}
        except KeyError:
            print()
        return render(request, 'uccx/home.html', context)

home.html

<tbody>
    {% for ticket in tickets %}
       <tr class="{% cycle 'row1' 'row2'">
          <td> {{ ticket.id }} </td>
          <td> {{ ticket.company.name }} </td>
          <td> {{ ticket.summary }} </td>
       </tr>
    {% endfor %}
</tbody> 

【问题讨论】:

  • 您发布的代码在运行时会遇到NameErrorcontactObjticketObj 均未定义。
  • @ndmeiri 我发布了一个与手头问题相关的代码,而不是我的整个项目,我的对象已定义并且代码按其预期运行。
  • 您必须为每个视图定义不同的 URL。目前,这两个视图的 URL 相同,因此每次调用名称 customerinformation 时,这将始终转到您的客户视图,如上面定义的那样。
  • @GarrettMarschke 然后发布定义对象的代码,因为这可能与问题有关。当函数体在执行时会崩溃时,为什么还要包含函数体呢?至少,您应该在原始帖子中添加一条注释,说明您包含了视图函数的精简版本。请考虑阅读How to create a Minimal, Complete, and Verifiable example

标签: python html django rest


【解决方案1】:

每个视图的 URL 模式都应该不同。否则,它将始终调用上面定义的视图,您可以通过 customerinformation 调用它

所以你的 URL 模式应该是

urlpatterns = [
  path('customer/', views.customer, name='customer'),
  path('information/', views.information, name='information'),
]

更新

您不必创建单独的视图来从不同的表中获取对象 在网页中显示

创建一个视图并在上下文字典中发送尽可能多的对象。

def table_content(request):
    ...     
    # fetch objects here from model
    contacts = Contact.objects.all()
    tickets = Ticket.objects.all()

    # set objects to context dictionary
    context = {'contacts': contacts, 'tickets' : tickets}

    return render(request, 'uccx/home.html', context)

现在在您的模板中,您可以轻松循环 ticketscontacts

{% for ticket in tickets %}
   <tr>
      <td> {{ ticket.id }} </td>
      ... 
   </tr>
{% endfor %}

{% for contact in contacts %}
   <tr>
      <td> {{ contact.id }} </td>
      ... 
   </tr>
{% endfor %}

【讨论】:

  • 对,我的问题是如何调用具有多个函数的视图并指定要使用的函数。原因是我在一个网页上有多个表格,这些表格由不同的对象填充。例如,function1 创建 obj1,function2 创建 obj2,以此类推。如何调用 function1 和 function2 来填充不同的表,具体取决于我是否需要来自 obj1 或 ob2 或 objx 的数据...谢谢!
  • 您需要有一个单一的视图,这样可以调用任意数量的函数来组装上下文字典的数据。
  • @DanielRoseman 我应该如何调用我的函数?我了解调用一个函数,但我不确定如何向 urls.py 中传递的 url 添加多个函数。目前,我在 views.py 中有函数“客户”和“信息”,并且想在同一个网页上调用这两个函数以填充表格的多个部分。
  • @GarrettMarschke 检查更新部分,您不必创建单独的视图来从不同的表中获取对象以显示在网页中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
  • 2021-10-21
  • 2015-03-29
  • 2016-12-27
  • 2015-06-06
  • 2016-03-03
相关资源
最近更新 更多