练习18-8 Python速成课程-无法循环

时间:2020-02-19 21:23:22

标签: python django

我试图遍历浇头,但代码不起作用。

型号:

\P{L}

urls.py:

from django.db import models

class Pizza(models.Model):

name = models.CharField(max_length=200)

def __str__(self):
    return self.name

class Toppings(models.Model):

pizza = models.ForeignKey(Pizza, on_delete=models.CASCADE)
name = models.CharField(max_length=200)

class Meta:
    verbose_name_plural = 'toppings'

def __str__(self):
    return self.name

观看次数:

from django.urls import path
from . import views

app_name = 'pizzas'

urlpatterns = [
    path('', views.index, name='index'),
    path('pizzas/', views.pizzas, name='pizzas'),
    path('pizzas/<int:toppings_id>/', views.toppings, name='toppings')
]

toppings.html:

from django.shortcuts import render
from .models import Pizza
from .models import Toppings

def index(request):
return render(request, 'pizzas/index.html')

def pizzas(request):

pizzas = Pizza.objects.all()
context = {'pizzas': pizzas}
return render(request, 'pizzas/pizzas.html', context)


def toppings(request, toppings_id):

toppings = Toppings.objects.get(id=toppings_id)
context = {'toppings': toppings}
return render(request, 'pizzas/toppings.html', context)

pizzas.html:

{% extends 'pizzas/base.html' %}

{% block content %}

<p>Pizzas: {{ pizza }}</p>
<p>Toppings:</p>
<ul>
{% for topping in toppings %}
  <li>
      <p>{{ topping }}</p>
  </li>
{% empty %}
  <li>There are no toppings</li>
{% endfor %}
</ul>

{% endblock content %}

问题出在for循环的toppings.html中,也许toppings视图也出了问题。

1 个答案:

答案 0 :(得分:1)

这里:

toppings = Toppings.objects.get(id=toppings_id)
context = {'toppings': toppings}

由于使用get,因此您只有一条记录。您不能在单个对象上循环。请阅读有关方法用法的文档。 如果要列出所有浇头,请从网址和视图中删除toppings_id,并使用all()

Toppings.objects.all()

您可以查看example,并查看如何创建视图以允许通过ID获取单个记录并列出所有记录列表。