HTML文件中的Python代码无法正常工作(Django)

时间:2018-06-21 16:44:13

标签: python html django

我有两个模板,一个叫做index.html,另一个叫做cart.html。 index.html文件接受python代码,但是如果我在cart.html中输入完全相同的代码,则无法识别Python。 我正在与Django合作。我该如何解决?

index.html python代码起作用的地方

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  <table>
    <tr>
        <th>List of car parts available:</th>
    </tr>
    {% for product in products_list %}
    <tr>
      <td>{{ product.name }}</td>
      <td>{{ product.price }}</td>
      <td>
        {% if product.in_cart == False %}
            <a href=""></a>
      </td>
      <td>{{ product.ordered }}</td>
    </tr>
    {% endfor %}
  </table>
</body>
</html>

cart.html python代码不起作用的地方

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  <table>
    <tr>
        <th>List of car parts available:</th>
    </tr>
    {% for product in products_list %}
    <tr>
      <td>{{ product.name }}</td>
      <td>{{ product.price }}</td>
      <td>
        {% if product.in_cart == False %}
            <a href=""></a>
      </td>
      <td>{{ product.ordered }}</td>
    </tr>
    {% endfor %}
  </table>
</body>
</html>

views.py

from django.http import HttpResponse
from django.template import loader
from .models import Product
# from django.shortcuts import render


def index(request):
    products_list = Product.objects.all()
    template = loader.get_template('products/index.html')
    context = {'products_list': products_list}
    return HttpResponse(template.render(context, request))

def cart(request):
    cart_list = Product.objects.filter(in_cart == True)
    template = loader.get_template('products/cart.html')
    context = {'cart_list': cart_list}
    return HttpResponse(template.render(context, request))

2 个答案:

答案 0 :(得分:1)

您传递给模板的上下文数据与您在模板中调用的变量不匹配。

从您的views.py文件中:

def cart(request):
    cart_list = Product.objects.filter(in_cart == True)
    template = loader.get_template('products/cart.html')
    context = {'cart_list': cart_list}
    return HttpResponse(template.render(context, request))

然后在您的cart.html文件中:

    {% for product in products_list %}

您需要将cart.html for循环更改为{% for product in cart_list %},因为cart_list是您添加到上下文中的变量。

答案 1 :(得分:0)

使用django,如果html文件是由django处理的,则代码仅在html内有效-这意味着您必须使用django的html模板处理工具之一。

更常用的是:render_to_stringget_template来获取模板对象,然后是.render()方法

检查django template documentation here以获得更多详细信息。