试图在第一个Django项目中实现HTML模板。不上映的电影

2022-07-06 12:56:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习一个在线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})

以下是我的web浏览器上的结果:

enter image description here

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


Tags: 文件fromimport模板indexhtmltable浏览器moviesmovietrtdththead
2条回答
网友
1楼 ·

正如另一个用户@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

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

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

网友
2楼 ·

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

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

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