【问题标题】:Django template tag for Model query result模型查询结果的 Django 模板标签
【发布时间】:2009-06-25 14:57:08
【问题描述】:

我想要一个简单的标签,用于显示任何模型数组的表格,例如:

{% table city_list %}

有人看到这样的东西吗?

【问题讨论】:

    标签: django-templates


    【解决方案1】:

    您可以尝试django-tables 应用程序,它允许您执行以下操作,给定模型书:

    # Define 
    class BookTable(tables.ModelTable):  
      id = tables.Column(sortable=False, visible=False)  
      book_name = tables.Column(name='title')  
      author = tables.Column(data='author__name')  
      class Meta:  
          model = Book  
    
    # In your views
    initial_queryset = Book.objects.all()  
    books = BookTable(initial_queryset)
    return render_to_response('table.html', {'table': books})  
    
    
    # In your template table.html
    <table>  
    
    <!-- Table header -->
    <tr>  
       {% for column in table.columns %}  
       <th>{{ column }}</th>
       {% endfor %}
    </tr>  
    
    <!-- Table rows -->
    {% for row in table.rows %}
    <tr>
       {% for value in row %}
       <td>{{ value }}</td>
       {% endfor %}
    </tr>
    {% endfor %}
    
     </table>  
    

    我认为上述内容比仅仅做更优雅和自我解释 {% 表 book_list %}

    【讨论】:

    • 代码很大,制作相同的标准代码。我喜欢所有标准的东西都能自动运行,除非我决定改变某些部分。
    • 如果你有兴趣看看我的回答。我已经对 django-tables 进行了一些更改,希望能让这更容易。
    【解决方案2】:

    尝试通用视图,例如http://www.djangobook.com/en/2.0/chapter11/

    【讨论】:

      【解决方案3】:

      我创建了一个fork of django-tables,这让这变得非常容易。这是一个简单的例子:

      models.py:

      from django.db import models
      
      class City(models.Model):
          name = models.CharField(max_length=200)
          state = models.CharField(max_length=200)
          country = models.CharField(max_length=200)
      

      tables.py:

      import django_tables as tables
      from .models import City
      
      class CityTable(tables.Table):
          class Meta:
              model = City
      

      views.py:

      from django.shortcuts import render_to_response
      from django.template import RequestContext
      from .models import City
      from .tables import CityTable
      
      def city_list(request):
          queryset = City.objects.all()
          table = CityTable(queryset)
          return render_to_response("city_list.html", {"city_table": table},
                                    context_instance=RequestContext(request))
      

      city_list.html:

      {% load django_tables %}
      {% render_table city_table %}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-17
        • 2012-08-10
        • 1970-01-01
        • 2019-07-06
        • 2012-09-10
        • 2016-06-19
        • 1970-01-01
        • 2023-03-19
        相关资源
        最近更新 更多