0

几天来,我一直在努力在 Django 中设置视图/网址。努力让我的头脑围绕它每个人似乎都略有不同。

我想要实现的是:

我想有一个博客,我可以在该网站上发布新闻帖子,该网站将位于示例 - mysite.com/blog/ 然后您可以点击查看单独的帖子,它会从每个帖子中拉出蛞蝓。(这非常有效)。

但是我想从博客应用程序中提取帖子,以便主页。因此,您可以查看最新帖子的片段。我现在明白我需要在 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']

如果您需要更多信息,请随时询问!我对这一切都很陌生,所以放轻松!:) 提前致谢!

4

1 回答 1

1

改变

url(r'$', blog),

url(r'$', 'views.blog_index', name='index'),

或者写一个单独的视图。

您收到错误的原因是因为您正在尝试执行需要标题页中blog的 a 的功能。slug您想要做的是index从您的标题页中显示不带slug.

此外,以下内容会引起您的痛苦:

from blog.views import blog_index, blog
from views import blog_index

blog_index你想用哪个?您最好'views.blog_index'在 URL 中使用符号。blog/删除上面的那些导入,并且只在你的 URL 中使用基于字符串的视图名称,就像你对和所做的那样blog_index/

编辑:这是您的整个 URL 应显示的内容(以使其正常工作..)

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')),
    )
于 2012-06-18T22:25:38.227 回答