2017-02-01 1 views
0

자습서를 거의 따르지 않았으므로 일반 세부 정보보기가 제대로 작동하도록 솔기를 만들 수 없습니다. pk로 전화를 걸고 페이지가 표시되지만 변수 {{publisher.name}}이 표시되지 않습니다. 나는 뷰와 모델에서 코드의 일부를 지워 버렸지 만, 주변기기로 생각하는 모델은 오류가 분명하다면 재 게시 할 수있다.변수 (필드?) 장고 일반 세부 정보보기에 표시되지 않습니다.

모든 파일을 HTML 파일을 제외하고 설문 조사 디렉토리에이 설문 조사/템플릿/여론 조사에서

감사

URL.py는 View.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'), 
] 

입니다

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}) 

답변

0

객체는 Publisher, publisher하지라고합니다.

+1

글쎄, 보통 그것은'객체'입니다. –

+0

아니요,'get_context_object_name()'은 모델의 소문자로 된 이름을 사용합니다. –

+2

둘 다 작동합니다 : https://docs.djangoproject.com/en/1.11/ref/class-based-views/mixins-single-object/#django.views.generic.detail.SingleObjectMixin.get_context_data –

0

템플릿의 모델 인스턴스에 액세스 할 수 없습니다. Publisher은 Model 클래스의 이름이지만 인스턴스는 아닙니다. 일반 상세 뷰의 개체 기본 이름은 object입니다. 따라서 {{ object.name }}을 사용해야합니다. 또는 소문자로 된 모델 이름도 기본값으로 사용할 수 있습니다. 귀하의 경우에는 그게 publisher.

개체의 변수 이름을 변경하려면 get_context_object_name(obj) 세부보기 방법을 구현해야합니다. 메서드는 상세 뷰 템플릿에서 개체의 원하는 변수 이름을 가진 문자열을 반환해야합니다.

0

템플릿의 개체 이름은 object이며 소문자 모델 이름은 별칭 (publisher)으로 사용됩니다. docs에 설명 된대로, 클래스 속성 context_object_name를 통해보기에 그 이름을 지정할 수 있습니다

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

그런 다음

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

템플릿에서 작동합니다.

+1

소문자로 된 모델 이름이'object'에 대한 기본 별명이므로'publisher'와 함께 사용하면 즉시 사용할 수 있습니다. [여기를보십시오] (https://docs.djangoproject.com/en/1.10/ref/class-based-views/mixins-single-object/#django.views.generic.detail.SingleObjectMixin.get_context_object_name). – trixn

+0

@trixn 사실, 더 정확합니다! 내 대답을 지정 ... – schwobaseggl

+0

설명 주셔서 감사합니다! –

관련 문제