尝试将 HTML 模板实施到第一个 Django 项目中。电影未放映

Trying to implement HTML Template into first Django project. Movies not showing

我正在学习在线 Python 教程,我必须创建一个 HTML 模板,在该模板中创建一个 table 供最终用户查看清单中的电影.我已经一步步按照老师的指示进行操作,但是当我刷新浏览器页面时,它只显示我在 HTML 中列出的 class 属性。我写的代码如下:

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})

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

enter image description here

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

您似乎有一个 space 传递上下文的地方:

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

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

正如其他用户@le.chris 提到的,您似乎有一个 space 用于传递上下文。 这将是正确的上下文:return render(request, 'index.html', {' movies': movies})。 但是,在您的视图文件中,我强烈建议使用基于 Class 的视图,在这种情况下首先导入 ListView 并创建一个 post_list.html 或指定一个 template_name 并且因为您正在使用 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