尝试将 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
我正在学习在线 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