0

我正在关注一个在线 Python 教程,我必须创建一个 HTML 模板,在该模板中创建一个表格供最终用户查看库存中的电影。我一步一步地按照老师的指示,但是当我刷新浏览器页面时,它只显示了我在 HTML 中列出的类属性。我写的代码如下:

index.html 文件:

<table class="table">
    <thead>
        <tr>
            <th>Title</th>
            <th>Genre</th>
            <th>Stock</th>
            <th>Daily Rate</th>
        </tr>
    </thead>
    <tbody>
        {% for movie in movies %}
            <tr>
                <td>{{ movie.title }}</td>
                <td>{{ movie.genre }}</td>
                <td>{{ movie.number_in_stock }}</td>
                <td>{{ movie.daily_rate }}</td>
            </tr>
        {% endfor %}
    </tbody>
</table>

和 views.py 文件:

from django.http import HttpResponse
from django.shortcuts import render
from .models import Movie


def index(request):
    movies = Movie.objects.all()
    return render(request, 'index.html', {' movies': movies})

这是我的网络浏览器上的结果:

在此处输入图像描述

如果有人知道为什么这不起作用,那么任何帮助都会很棒!

4

2 回答 2

0

您似乎有一个传递上下文的空间:

return render(request, 'index.html', {' movies': movies})

您需要替换' movies''movies',否则在渲染模板时该变量将无法使用正确的名称。

于 2020-05-26T17:02:58.367 回答
0

正如其他用户@le.chris 所提到的,您似乎有一个传递上下文的空间。这将是正确的上下文:return render(request, 'index.html', {' movies': movies})。但是,在您的视图文件中,我强烈建议您使用基于类的视图,ListView在这种情况下首先导入并创建一个 post_list.html 或指定一个模板名称,并且由于您将其movies用作上下文对象,因此您还需要在context_object_name属性。也许像这样:

class MovieListView(ListView):
    model = Movie
    template_name = 'appname/index.html' #appname is the name of your app 
    context_object_name = 'movies'
    ordering = # optional 
    paginate_by = 3

在应用程序的 urls.py 文件中:

path('', MovieListView.as_view(), name='movie-index') #adjust the name as you please

于 2020-05-26T17:39:54.107 回答