代码之家  ›  专栏  ›  技术社区  ›  juju

Python/Jinja2-使用HTML语法(Django)通过Python生成的问题呈现列表

  •  2
  • juju  · 技术社区  · 8 年前

    只要学习python、Jinja和所有东西,您的帮助将是巨大的! 我的Python程序提取数据并将其放入列表形式。我的目标是在线显示html表中每行数据的三个部分。我试图通过使用字符串替换和html语法来实现这一点。这3个变量应该位于名称、价格和数量选项卡下。结果是这样的:

    下面是我如何创建格式的。我确信我呈现代码的方式写的正是我所写的,即html语法,但我不确定如何输入数据,以便识别html语法

        card_list = []
        card_info = "<tbody> \
                        <tr> \
                            <th scope='row'>1</th> \
                            <td>{0}</td> \
                            <td>{1}</td> \
                            <td>{2}</td> \
                        </tr> \
                     </tbody>".format(card_name, buy_price, quantity)
                    # 3 variables are one line of a list of data
        card_list.append(card_info)
        return card_list
    

    在Django视图中。py,我将列表呈现如下:

    from Buylist.buy import get_data
    data = get_data(ixalan)
    def card_data(request):
        return render(request, 'buylist/basic.html', {'content':data})
    

    使用Jinja的HtML看起来像:

    {% extends "buylist/header.html" %}
    
    {% block content %}
    
        <table class="table">
      <thead class="thead-inverse">
        <tr>
          <th>#</th>
          <th>Name</th>
          <th>Price</th>
          <th>Quantity</th>
        </tr>
      </thead>
    
          # For loop getting data from card_data is here
      {% for c in card_data %}
        {{c}}
      {% endfor %}
    </table>
    {% endblock %}
    

    我真的很感激任何帮助!非常感谢!

    1 回复  |  直到 8 年前
        1
  •  1
  •   Norrius    8 年前

    最好将HTML代码保存在模板中,而不是从Python生成。您可以从Jinja模板访问嵌套的数据结构,例如元组或dict。以下是使用字典可以实现这一点的方法(元组可能在内存上更容易,但dict更具可读性):

      {% block content %}
          <table class="table">
        <thead class="thead-inverse">
          <tr>
            <th>#</th>
            <th>Name</th>
            <th>Price</th>
            <th>Quantity</th>
          </tr>
        </thead>
    
        {% for item in card_data %}
        <tbody>
          <tr>
            <th scope='row'>1</th>
            <td>{{item.name}}</td>
            <td>{{item.price}}</td>
            <td>{{item.quantity}}</td>
          </tr>
        </tbody>
        {% endfor %}
      </table>
      {% endblock %}
    

    您可以将数据放入dicts中,并以相同的方式传递:

    data = [  
        {'name': 'Card 1 Name', 'price': 'Card 1 Price', 'quantity': 'Card 1 Quantity'},
        {'name': 'Card 2 Name', 'price': 'Card 2 Price', 'quantity': 'Card 2 Quantity'},
        {'name': 'Card 3 Name', 'price': 'Card 3 Price', 'quantity': 'Card 3 Quantity'},
    ]
    
     render(request, 'buylist/basic.html', {'card_data': data})