0

私はDjangoを初めて使用し、基本的なWebサイトを作成しようとしていますが、ページの関連レコードを取得するのにいくつかの困難があります.

モデル.py

import datetime
from django.db import models
from django.conf import settings
from ckeditor.fields import RichTextField
from markdown import markdown

class LiveEntryManager(models.Manager):
      def get_query_set(self):
      return super(LiveEntryManager,self).get_query_set().filter(status=self.model.LIVE_STATUS)


class Page(models.Model):
      LIVE_STATUS = 1
      HIDDEN_STATUS = 2
      STATUS_CHOICES = (
            (LIVE_STATUS, 'Live'),
            (HIDDEN_STATUS, 'Hidden'),
       )
      title = models.CharField(max_length=250, help_text='Max 250 characters.')
      slug = models.SlugField(unique=True, help_text='Suggested automatically generated from the title. Must be unique') 
      description = RichTextField()
      description_html = models.TextField(editable=False, blank=True) 
      status = models.IntegerField(choices=STATUS_CHOICES, default=LIVE_STATUS, 
                           help_text="Only pages with live status will be publicly displayed")

      def save(self, force_insert=False, force_update=False):
          self.description_html = markdown(self.description)
          super(Page, self).save(force_insert, force_update)

      def get_record(self):
          return self.objects.get()

      #Managers
      live = LiveEntryManager()
      objects = models.Manager()

      class Meta:
            ordering = ['title']
            verbose_name_plural = "Pages"

      def __unicode__(self):
          return self.title

      def get_absolute_url(self):
          return "/%s/" % self.slug

class Image(models.Model):
      page = models.ForeignKey(Page)
      name = models.CharField(max_length=250)
      image = models.ImageField(upload_to='gallery')

      class Meta:
            ordering = ['name']

      def __unicode__(self):
          return self.name

そして Views.py

from django.shortcuts import get_object_or_404, render_to_response
from django.views.generic.list_detail import object_list
from mainsite.models import Page, Image


def home(request):
    return render_to_response('templates/home.html')


def page(request, slug):
    one_page = get_object_or_404(Page, slug=slug)
    return render_to_response('templates/page/page.html',
                          { 'object_list': one_page.get_record() })

および Urls.py

urlpatterns = patterns('',
   # Examples:
   url(r'^$', 'mainsite.views.home', name='home'),
   # url(r'^disability/', include('disability.foo.urls')),
   url(r'^page/(?P<slug>[-\w]+)/$', 'mainsite.views.page'),
   # Uncomment the admin/doc line below to enable admin documentation:
   # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
   url(r'^grappelli/', include('grappelli.urls')),
   # Uncomment the next line to enable the admin:
   url(r'^admin/', include(admin.site.urls)),

)

私がやりたいことは、/page/test に移動して、そのオブジェクトのタイトル、説明、および画像のみを取得できるようにすることです。すべてのオブジェクトを取得してテンプレートに表示する方法は知っていますが、単一のレコードを取得する方法がわかりません。助けていただければ幸いです。

ありがとう

4

2 に答える 2

1

単一の Page モデルについてデータベースにクエリを実行する場合は、使用できます

views.py

from django.core.exceptions import ObjectDoesNotExist
from django.http import HttpResponse 
from models import Pages



def page(request, slug):
    try:
        page = Pages.objects.get(slug=slug)
    except ObjectDoesNotExist:
        return HttpResponse(status=404)
    return render(request, 'templates/page/page.html', {'page': page})

次に、使用するだけです

{{page.title}}

またはあなたのテンプレートでそのようなもの。

また、代わりにクエリを実行して反復可能なリストを返したい場合は、使用できます

Pages.objects.filter()

それ以外の

Pages.objects.get()
于 2017-03-31T14:47:36.513 に答える
0

どこget_record()から来たの?の戻り値get_object_or_404はモデル インスタンスです。「取得」するものは他にありません。インスタンスをコンテキストに渡すだけです。object_listまた、コンテキスト名として使用しないでください。これはリストやクエリセットではなくインスタンスであるだけでなく、その名前はページネーションで最も頻繁に使用されます。実際にページネーションを行っていない場合、コードで混乱を招くだけです。

return render_to_response('templates/page/page.html', {
    'one_page': one_page,
})

次に、テンプレートで:

<h1>{{ one_page.title }}</h1>
<img src="{{ one_page.image.url }}" alt="">
<p>{{ one_page.description }}</p>
于 2012-09-24T21:07:43.167 に答える