我是Django的新手,我现在正在为一些我最喜欢的导演创建一个电影数据库。我一直在关注教程视频,而我目前正在尝试获取详细信息视图,以显示每位导演的所有添加的电影。然而,当我进入导演时,它并没有显示他们的电影。
导演/ models.py
from django.db import models
class Director(models.Model):
photo = models.CharField(max_length=250, default='none')
name = models.CharField(max_length=250)
born = models.CharField(max_length=250)
birth_date = models.CharField(max_length=20)
married = models.CharField(max_length=1)
def __str__(self):
return self.name
class Films(models.Model):
director = models.ForeignKey(Director, on_delete=models.CASCADE)
title = models.CharField(max_length=50)
year = models.IntegerField(default=0)
rating = models.DecimalField(max_digits=2, decimal_places=1, default=0)
budget = models.CharField(max_length=20)
def __str__(self):
return self.title
导演/ urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^(?P<name_id>[0-9]+)/$', views.detail, name='detail'),
]
导演/ views.py
from django.shortcuts import render
from django.http import HttpResponse
from .models import Director, Films
def index(request):
all_directors = Director.objects.all()
return render(request, 'director/index.html', {'all_directors': all_directors})
def detail(request, name_id):
try:
direct = Director.objects.get(pk=name_id)
except Director.DoesNotExist:
raise Http404("Director not found")
return render(request, 'director/detail.html', {'direct': direct})
导演/ detail.html
<h3 align="center"> {{ direct }} </h3><br>
<img src="{{ director.photo }}">
<h4>Film List</h4>
<ul>
{% for films in director.films_set.all %}
<li>{{ direct.title }} - {{ direct.rating }}</li>
{% endfor %}
</ul>
当我运行服务器并转到页面时,我点击了一个导演,它说的是导演的名字,以及&#34;电影列表&#34;。请告知如何解决这个问题,非常感谢任何帮助!
答案 0 :(得分:0)
这应解决它:
{% for film in director.films_set.all %}
<li>{{ film.title }} - {{ film.rating }}</li>
{% endfor %}
你想要每部电影的标题和评级,所以我想使用direct.title
和direct.rating
就是问题所在。此外,您在循环中定义的变量是每个film
个人,因此我将films
替换为film
。
答案 1 :(得分:0)
在您的视图中,您只将一个上下文对象传递给模板direct
。此direct
是导演模型的成员:模板中的direct
显示导演的名称是有道理的,因为这是您为该模型定义__str__
方法的方法。
除此之外,您的其他变量都不会显示。为什么呢?
director.photo
代替direct.photo
。模板中未定义director
。 (作为旁注,director
是IMO更好的变量名。)direct.rating
和direct.title
,即使这些是Film
模型的属性。您需要修改如下:<ul> {% for film in direct.films_set.all %} <li>{{ film.title }} - {{ film.rating }}</li> {% endfor %} </ul>
(我还将films
更改为film
,因为这更准确地反映了变量的内容。)