【发布时间】:2012-06-20 22:09:51
【问题描述】:
几天来,我一直在努力在 Django 中设置视图/网址。努力理解它,每个人的做法似乎略有不同。
我想要实现的是:
我想有一个博客,我可以在该网站上发布新闻帖子,该网站将位于示例 - mysite.com/blog/ 然后您可以单击查看单独的帖子,它会从每个帖子中拉出蛞蝓。 (这非常有效)。
但是我想从博客应用程序中提取帖子,以便主页。因此,您可以查看最新帖子的 sn-p。我现在明白我需要在 app 文件夹之外和主目录中创建一个视图和一个 URL。但是我正在努力让他们联系在一起。我目前收到上面显示的错误消息。 “没有博客与给定的查询匹配。”这是我的 URL、模型和 2 个不同视图文件夹的代码。
//URLS for app and main directory
import authority
from django.conf import settings
from django.conf.urls import patterns, include, url
from django.conf.urls.defaults import url, include, patterns
from django.contrib import admin
admin.autodiscover()
authority.autodiscover()
urlpatterns = patterns('',
url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
(r'^authority/', include('authority.urls')),
(r'^i18n/', include('django.conf.urls.i18n')),
(r'^admin/', include(admin.site.urls)),
url(r'^$', 'views.blog', name='index'),
url(r'^blog/(?P<slug>[-\w]+)/$', 'blog.views.blog', name="blog"),
url(r'^blog/$', 'blog.views.blog_index', name="blog_index"),
)
if settings.DEBUG:
urlpatterns += patterns('',
# Trick for Django to support static files (security hole: only for Dev environement! remove this on Prod!!!)
url(r'^admin/pages/page(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.PAGES_MEDIA_ROOT}),
url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
url(r'^admin_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.ADMIN_MEDIA_ROOT}),
)
urlpatterns += patterns('',
(r'^', include('pages.urls')),
)
//主页的主视图
from django.http import HttpResponse
from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext
from blog.models import Blog, NewsPost
def blog_index(request):
blogs = Blog.objects.filter(active=True)
return render_to_response('index.html', {
'blogs':blogs,
}, context_instance=RequestContext(request))
//博客应用的浏览量
from django.http import HttpResponse
from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext
from blog.models import Blog, NewsPost
def blog_index(request):
blogs = Blog.objects.filter(active=True)
return render_to_response('blog/index.html', {
'blogs':blogs,
}, context_instance=RequestContext(request))
def blog(request, slug):
blog = get_object_or_404(Blog, active=True, slug=slug)
return render_to_response('blog/blog_post.html', {
'blog': blog
}, context_instance=RequestContext(request))
//博客应用程序中的模型
from django.contrib.auth.models import User
class TimeStampedActivate(models.Model):
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
active = models.BooleanField(default=False, help_text="Controls
whether or now this news post is live")
class Meta:
abstract = True
class Blog(TimeStampedActivate):
title = models.CharField(max_length=255, help_text="Can be
anything up to 255 character")
slug = models.SlugField()
description = models.TextField(blank=True, help_text="Give a short
description of the news post")
content = models.TextField(blank=True, help_text="This is the main
content for the news post")
user = models.ForeignKey(User, related_name="blog")
def __unicode__(self):
return self.title
@models.permalink
def get_absolute_url(self):
return ('blog', (), {
'slug': self.slug
})
class NewsPost(TimeStampedActivate):
title = models.CharField(max_length=255, help_text="title of the post")
slug = models.SlugField()
description = models.TextField(blank=True, help_text="Give a short
description of the news post")
content = models.TextField(blank=True, help_text="This is the main
content for the news post")
publish_at = models.DateTimeField(default=datetime.datetime.now(),
help_text="Choose when the post is visible")
blog = models.ForeignKey(Blog, related_name="posts")
def __unicode__(self):
return self.title
class Meta:
ordering = ['-publish_at', '-modified', '-created']
如果您需要更多信息,请随时询问!我对这一切都很陌生,所以放轻松! :) 提前致谢!
【问题讨论】:
-
听起来你的
blogpost视图应该和你的blog_index一样,对吗?您似乎想要或多或少相同的东西 - 博客文章列表。有什么区别? -
嗨 Daniel - 好的,我已经复制并粘贴了,博客应用程序的视图更改了 URL 导入的模型的名称。我没有收到此错误消息 - 无法导入名称博客
-
对不起,什么? “更改了 URL 导入的模型的名称”——这是什么意思?如果您更改了某些代码,请更新上面的帖子,并显示实际的错误消息。
-
这是我收到错误的那一行 - 从 URL 页面上的视图导入博客.. 我看不出有什么问题?我在另一个 views.py 文件中有另一个名为 blog 的视图是否冲突?
-
异常类型:TypeError 异常值:blog() 只需要 2 个参数(给定 1 个)
标签: django django-models django-templates django-views