1

多年来一直坚持这一点。目前正在学习 Django 并在其他网站上做了一些工作。开始构建我自己的网站并被视图/ URL 卡住。

我已经构建了一个名为“博客”的应用程序,我想在其中显示新闻帖子。

到目前为止,我已将所有博客项目加载到工作正常的模板中。但是,当我尝试单击“阅读更多”时,该页面不会进入帖子自己的页面。但是,它显示将要加载的页面的位置会告诉您它将加载正确的 URL。所以它通过我想要的方式拉动蛞蝓,但是当您单击按钮时,它只会停留在同一页面上。

如果我将博客文章加载到主页上,我会设法让它完美运行。但是我希望它们加载到 /blog/ 上,显然我不希望它成为我的主页。

我已阅读所有文档,它与我一直遵循的教程略有不同。无论如何,这是我的一些代码,真的希望有人能帮助我!

   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', {
        'blogs': blogs
    }, context_instance=RequestContext(request))






url(r'blog/', 'blog.views.blog_index', name="blog_index"),
    url(r'blog/(?P<slug>[-\w]+)/$', 'blog.views.blog', name="blog"),

//模型

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

谢谢,

乔什

4

2 回答 2

2

您的网址r'blog/'末尾没有 $ ,所以我认为 django 将始终匹配此条目而不是r'blog/(?P<slug>[-\w]+)/$'条目。我会尝试颠倒顺序,看看是否有帮助:

url(r'blog/(?P<slug>[-\w]+)/$', 'blog.views.blog', name="blog"),
url(r'blog/', 'blog.views.blog_index', name="blog_index"),

我以前遇到过这个问题,并花了很多时间试图解决这个问题。

于 2012-06-17T11:42:22.483 回答
0

您的第一个 urlconf 条目正在捕获所有以“blog”开头的 URL。在末尾加上 $ 以终止比赛。

于 2012-06-17T11:42:44.207 回答