【问题标题】:django | importing two models' stored data in a single html pageDjango |在单个 html 页面中导入两个模型的存储数据
【发布时间】:2020-04-04 21:04:37
【问题描述】:

我的views.py 中有两个视图如下:

def table1(request):
    template_name = 'tables.html'
    queryset = one.objects.all()
    context = {
    "table1_list": queryset
    }
    return render(request, template_name, context)

def table2(request):
    template_name = 'tables.html'
    queryset = two.objects.all()
    context = {
    "table2_list": queryset
    }
    return render(request, template_name, context)

以及models.py中的以下型号:

class one(models.Model):
    title = models.CharField(max_length=100)
    explanation = models.CharField(max_length=1000, blank=True, null=True)

 class two(models.Model):
    title = models.CharField(max_length=100)
    explanation = models.CharField(max_length=1000, blank=True, null=True)

在我的tables.html 中,我想展示这两个模型的内容。我有:

  <p>Table one content</p>
  <ul>
  {% for obj in table1_list %}
    {{ obj.title }}, {{ obj.explanation }}     
  {% endfor %}
 </ul>

  <p>Table two content</p>
  <ul>
  {% for obj in table1_list %}
    {{ obj.title }}, {{ obj.explanation }}     
  {% endfor %}
 </ul>

但由于我只能从views.pyurls.py 中返回一个视图,因此我无法返回两个表。在urls.py 我必须写以下任何一个:

urlpatterns = [
    url(r'^$', home),
    url(r'^tables/$', table1),
]

urlpatterns = [
    url(r'^$', home),
    url(r'^tables/$', table2),
]

我尝试将views.py 中的查询中的两个表都添加为:

def table1(request):
    template_name = 'tables.html'
    queryset_one = one.objects.all()
    queryset_two = two.objects.all()
    context = {
    "table1_list": [queryset_one, queryset_two]
    }
    return render(request, template_name, context)

但只显示后一个表格的内容。

我将不胜感激。

【问题讨论】:

    标签: python django database sqlite


    【解决方案1】:

    您需要这样做才能在视图中显示这两个模型。

    def table1(request):
        template_name = 'tables.html'
        queryset_one = one.objects.all()
        queryset_two = two.objects.all()
        context = {
        "table1_list": queryset_one, 
        "table2_list": queryset_two
        }
        return render(request, template_name, context)
    

    然后:

     <p>Table one content</p>
      <ul>
      {% for obj in table1_list %}
        {{ obj.title }}, {{ obj.explanation }}     
      {% endfor %}
     </ul>
    
      <p>Table two content</p>
      <ul>
      {% for obj in table2_list %}
        {{ obj.title }}, {{ obj.explanation }}     
      {% endfor %}
     </ul>
    

    别忘了在你的views.py中导入这两个模型

    【讨论】:

      【解决方案2】:

      这可能是因为yout模型中的两个类具有相同的字段,而django只获取后者的信息。它的工作方式是在字典中使用不同的键传递两个查询并相应地修改您的模板。

      所以你的views.py 看起来像:

      def table1(request):
          template_name = 'tables.html'
          queryset_one = one.objects.all()
          queryset_two = two.objects.all()
          context = {
          "t1": queryset_one, "t2":queryset_two
          }
          return render(request, template_name, context)
      

      你的模板 tables.html 看起来像

        <p>Table one content</p>
        <ul>
        {% for obj in t1 %}
          {{ obj.title }}, {{ obj.explanation }}     
        {% endfor %}
       </ul>
      
        <p>Table two content</p>
        <ul>
        {% for obj in t2 %}
          {{ obj.title }}, {{ obj.explanation }}     
        {% endfor %}
       </ul>
      

      【讨论】:

        猜你喜欢
        • 2021-01-31
        • 2017-09-20
        • 2010-11-09
        • 2013-04-14
        • 2013-03-24
        • 1970-01-01
        • 1970-01-01
        • 2022-01-11
        • 2012-02-23
        相关资源
        最近更新 更多