变量(字段?)不会在Django Generic Detail View中显示

时间:2017-02-01 13:36:57

标签: python django detailsview

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

所有文件都在poll目录中,但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})

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您无法在模板中访问此模型的实例。 Publisher是Model类的名称,但不是它的实例。通用详细信息视图中对象的默认名称为object。所以你需要使用{{ object.name }}。或者您也可以使用小写的模型名称作为默认名称。在您的情况下publisher

如果要更改对象的变量名称,则必须实现详细视图的get_context_object_name(obj)方法。 该方法必须在详细信息视图模板中返回带有所需对象变量名称的字符串。

答案 2 :(得分:0)

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

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

然后

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

将在模板中使用。