变量(字段?)不会显示在 Django 通用详细信息视图中

Variables (fields?) Won't Display in Django Generic Detail View

我一直在松散地遵循教程,但无法通过接缝来获得通用的细节视图以正常工作。我用 pk 调用,页面显示,但变量 {{publisher.name}} 没有显示。我已经从视图和模型中删除了一些我认为是外围的代码,但如果错误不明显,我可以重新发布。

除了 HTML 文件在 poll/template/poll

之外,所有文件都在轮询目录中

谢谢

URL.py是

from django.conf.urls import url
from poll.views import PublisherList
from . import views

app_name = "poll"

urlpatterns = [
    url(r'^publishers/$', PublisherList.as_view(), name = "publisherlist"),
    url(r'^start/', views.PublisherCreate.as_view(), name = 'make-publisher'),
    url(r'^(?P<pk>[0-9]+)/$', views.PublisherDetail.as_view(), name = 'detail-publisher'),
]

View.py

from django.shortcuts import render
from django.views.generic.edit import CreateView
from django.views import generic
from django.views.generic import ListView
from poll.models import Publisher

...

class PublisherDetail(generic.DetailView):
    model = Publisher
    template_name = 'Poll/publisher_details.html'

和 HTML 文件

{% extends "personal/header.html" %}

{% block content %}

<h1>{{ Publisher.name }}</h1>
<h1>Options</h1>
{%endblock%}

和models.py

from django.db import models
from django.core.urlresolvers import reverse
# Create your models here.


class Publisher(models.Model):
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=50)
    city = models.CharField(max_length=60)
    state_province = models.CharField(max_length=30)
    country = models.CharField(max_length=50)
    website = models.URLField()

    class Meta:
        ordering = ["-name"]

    def __str__(self):              # __unicode__ on Python 2
        return self.name

    def get_absolute_url(self):
        return reverse('build:details', kwargs = {'pk':self.pk})

模板中的对象名为 publisher,而不是 Publisher

您不能像这样在模板中访问模型实例。 Publisher 是模型的名称 class 但不是模型的实例。通用详细视图中对象的默认名称是 object。所以你需要使用{{ object.name }}。或者您也可以使用小写的模型名称作为默认名称。在你的情况下就是 publisher.

如果你想改变你的对象的变量名,你必须实现你的细节视图的get_context_object_name(obj)方法。 该方法必须 return 一个字符串,其中包含详细视图模板中对象的所需变量名称。

模板中对象的默认名称是object,而小写模型名称作为别名(publisher)。您可以通过 class 属性 context_object_name 在视图中指定该名称,如 docs:

中所述
class PublisherDetail(generic.DetailView):
    # ...
    context_object_name = 'foo' 

然后

{{ foo.name }}
# {{ publisher.name }}  should work out of the box

将在模板中工作。