从数据库Django获取单个记录
我是Django的新手,尝试创建一个基本网站,但在获取页面的相关记录时遇到了一些困难 Models.py从数据库Django获取单个记录,django,django-models,django-views,Django,Django Models,Django Views,我是Django的新手,尝试创建一个基本网站,但在获取页面的相关记录时遇到了一些困难 Models.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):
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
和视图.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() })
和url.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)),
urlpatterns=patterns(“”,
#示例:
url(r'^$','mainsite.views.home',name='home'),
#url(r“^disability/”,包括('disability.foo.url'),
url(r'^page/(?P[-\w]+)/$,'mainsite.views.page'),
#取消注释下面的admin/doc行以启用管理员文档:
#url(r“^admin/doc/”,包括('django.contrib.admindocs.url'),
url(r“^grappelli/”,包括('grappelli.url'),
#取消注释下一行以启用管理员:
url(r“^admin/”,包括(admin.site.url)),
)
我想做的是能够进入say/page/test,只获取该对象的标题、描述和图像。我知道如何获取所有对象并将它们显示在模板中,但我不知道如何获取单个记录,如果您能提供帮助,我将不胜感激
谢谢你从哪里得到的
get_record()
?get\u object\u或_404
的返回值是一个模型实例。没有其他东西可以“获取”,只需将实例传递给上下文即可。并且,不要使用对象列表
作为上下文名称。这不仅是一个实例,而不是列表或查询集,而且这个名称最常用于分页,如果您实际上没有分页任何内容,那么您只会在代码中造成混乱
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>
{{one_page.title}
{{one_page.description}}
如果您想查询数据库中可以使用的单页模型
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}}
或者类似于模板中的内容
另外,如果您想查询并返回一个iterable列表,可以使用
Pages.objects.filter()
而不是
Pages.objects.get()
感谢你,除了图片,大部分都对我有效。出于某种原因,我只能在查看页面时看到。你的模型甚至没有
ImageField
。我把它放在那里只是为了教学目的,但最终数据并不仅仅是从以太中提取出来的。好吧,那么我如何从图像模型中获取相关的图像字段呢?您可以使用{%for image in one_page.image\u set.all%}
循环它们。然后是图像src的{{image.image.url}
。它现在在img标记中显示正确的url,但是我觉得它仍然找不到图像,并放置了一个占位符来显示损坏的图像。我已经研究过类似的问题,这可能是因为请求上下文中缺少了什么吗?