我有两个模板,一个叫做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))
答案 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_string
或get_template
来获取模板对象,然后是.render()
方法
检查django template documentation here以获得更多详细信息。