【问题标题】:Django - display multiple views in one templateDjango - 在一个模板中显示多个视图
【发布时间】:2020-07-02 20:11:31
【问题描述】:

我目前正在做一个 Django 项目,我想在其中构建一种仪表板,它实际上可能有两个引导列(将来可能是 3-4 个)。在每一列中,将显示来自数据库的内容。目前,这意味着我想显示两个表。一个显示模型的所有条目和一个显示最后历史条目的表(django-simple-history)。这些表是使用 django-table2 呈现的。

首先我尝试用 MultiTableMixin 解决这个问题。不幸的是没有成功。我目前的想法是在逻辑上将内容分成两个视图,然后为每一列添加一个视图。我试图让视图显示在 iframe 中。此外,这并不像想象的那么好。

我的问题有哪些选择。还是我想得太复杂而迷失了方向?

【问题讨论】:

  • 你可以使用inclusion_tag

标签: django django-views django-templates django-tables2 django-simple-history


【解决方案1】:

您的标题有点误导,因为您的问题实际上很简单:
只需在您的视图中进行两次查询,即可获得两个用于呈现列/表的查询对象。所以你有一个视图(功能),但逻辑仍然是独立的内容:

def get_data_for_columns(request):
    column_all_data = YourModel.objects.all()
    column_latest_data = YourModel.objects.all().order_by('-publish_date')[10:] # 10 latest objects by publish date

    context = {
        'all_data': column_all_data
        'latest_data': column_latest_data
    }
    
    return render(request, 'your_template.html', context)

模板:

# example loop data and render table

   <table>
     <tr>
       {% for item in all_data %}

       <td>{{ item.value }}</td>

       {% endfor %}
     </tr>
   </table>

   <table>
     <tr>
       {% for item in latest_data %}

       <td>{{ item.value }}</td>

       {% endfor %}
     </tr>
   </table>

【讨论】:

  • 好的,如果我只需要显示数据库中的数据,这可以正常工作。所以目前我的问题应该得到解决。但是,如果我想添加第三列以及基于类的视图(如通用 CreateView)怎么办?
  • @LukasW。然后你可以将你的函数嵌套在一个视图中。很高兴它有帮助!如果您能投票并接受答案,将不胜感激。
  • 我接受并赞成您的回答。但是可以举例说明如何在单个视图中嵌套具有不同逻辑的函数吗?
  • 你不觉得你的解决方案最后会导致大视图(函数)乱七八糟吗?我问这个问题的原因是,我遇到了一个包含 300 多行代码和一个模板文件的视图(这也很庞大),我认为这里有些不对劲!我必须重构这个观点。因为如果使用API​​将其与前端分开,那么这样的页面会有一些小API,甚至页面本身也会用一些小组件构建,并且它的代码更易于阅读和理解(双方)。
最近更新 更多