Django模板不显示模型项

时间:2016-10-06 15:12:18

标签: python django

我是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;。请告知如何解决这个问题,非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

这应解决它:

{% for film in director.films_set.all %}
<li>{{ film.title }} - {{ film.rating }}</li>
{% endfor %}

你想要每部电影的标题和评级,所以我想使用direct.titledirect.rating就是问题所在。此外,您在循环中定义的变量是每个film个人,因此我将films替换为film

答案 1 :(得分:0)

在您的视图中,您只将一个上下文对象传递给模板direct。此direct是导演模型的成员:模板中的direct显示导演的名称是有道理的,因为这是您为该模型定义__str__方法的方法。

除此之外,您的其他变量都不会显示。为什么呢?

  • 您使用director.photo代替direct.photo。模板中未定义director。 (作为旁注,director是IMO更好的变量名。)
  • 您使用direct.ratingdirect.title,即使这些是Film模型的属性。您需要修改如下:
    <ul>
        {% for film in direct.films_set.all %}
        <li>{{ film.title }} - {{ film.rating }}</li>
        {% endfor %}
    </ul>

(我还将films更改为film,因为这更准确地反映了变量的内容。)