Django 1.8:无法在我的网站上显示我的博客条目列表

Django 1.8:无法在我的网站上显示我的博客条目列表,django,python-3.x,django-models,django-templates,django-views,Django,Python 3.x,Django Models,Django Templates,Django Views,我一直在尝试建立我的Django博客页面,通过某种方式查询我按反时间顺序发布的帖子。到目前为止,我做了三篇测试文章(标记为“测试条目”1-3),但在我尝试在查询列表中显示这些文章之后,我遇到了一个模板错误(已解决),然后取而代之的是一个类型错误(已解决),现在我遇到了一个同样乏味的问题:一个空白网页。现在我根本无法在实际的网页上获得我的帖子 以下是我得到的: 型号.py from django.db import models from django.db.models import perma

我一直在尝试建立我的Django博客页面,通过某种方式查询我按反时间顺序发布的帖子。到目前为止,我做了三篇测试文章(标记为“测试条目”1-3),但在我尝试在查询列表中显示这些文章之后,我遇到了一个模板错误(已解决),然后取而代之的是一个类型错误(已解决),现在我遇到了一个同样乏味的问题:一个空白网页。现在我根本无法在实际的网页上获得我的帖子

以下是我得到的:

型号.py

from django.db import models
from django.db.models import permalink
from django_markdown.models import MarkdownField

# Create your models here.

class EntryQuerySet(models.QuerySet):
    # This will be used for filtering everything that is published
    def published(self):
        return self.filter(publish=True)

class Post(models.Model):
    title = models.CharField(max_length=200) 
    body = MarkdownField() # formerly Text Field
    slug = models.SlugField(max_length=200, unique=True)
    publish = models.BooleanField(default=True)
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True) # Keeps track of everytime it gets saved
   # author = models.ForeignKey(User)
    # tags = models.ManyToManyField(Tag) # 16 min vid

    objects = EntryQuerySet.as_manager() #Im allowed to do this because of the QuerySet class

    def __str__(self): 
        return self.title

    @permalink
    def get_absolute_url(self):
        return ('view_blog_post', None, { 'slug': self.slug })

    class Meta:
        verbose_name = "Blog Entry"
        verbose_name_plural = "Blog Entries"
        ordering = ["-created",]
from django.conf.urls import include, url
from django.contrib import admin
from blog.views import BlogIndex

url1 = url(r'^admin/', include(admin.site.urls))           # 1. url for "admin" page
url2 = url(r'^$', 'joins.views.home', name='home')         # 2. url for "home" page
url3 = url(r'^blogI/$', BlogIndex.as_view(), name="index") # 3. url for the "blog" page
url4 = url(r'^markdown/', include('django_markdown.urls')) # 4. url for the "django_markdown" module

urlpatterns = [url1, url2 , url3 ,url4]
视图。py:

from django.shortcuts import render 
from . import models # so I can import 'Post'
from django.views.generic.list import ListView 
from django.utils import timezone

class BlogIndex(ListView): 
    model = models.Post
    def get_queryset(self, request):
        template_name = "blog.html"
        posts = models.Post.objects.filter(publish=timezone.now()).order_by('publish')
        return render(request,template_name,{'posts': posts})
base.html

<!DOCTYPE html>
<html lang="en">
  <head>
    {% include 'header.html' %}
  </head>

  <body>
  <!-- Navbar -->
    {% include 'navbar.html' %}

  <!-- Jumbotron -->
   {% block jumbotron_content %}

   {% endblock %}

  <!-- Container -->
    <div class="container">

      {% block content %}
      {% endblock %}

      {% block blog_entries %}
      {% endblock %}
   </div>


  <!-- FOOTER -->
      <footer>
        <p>&copy; Company 2014</p>
      </footer>
    </div> <!-- /container -->
    <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
    <script src="http://getbootstrap.com/dist/js/bootstrap.min.js"></script>
    <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
    <script src="http://getbootstrap.com/assets/js/ie10-viewport-bug-workaround.js"></script>
  </body>
</html>
{% extends "base.html" %}
{% load django_markdown %}

{% block blog_entries %}
<div id="block">
<div class="prose"> 
<h1>Articles</h1>
    {% if posts %}
        <ul>
            {% for post in posts %}
                <li>
                <a href="{{ post.get_absolute_url }}"> 
                {{ post.title }}
                </a> 
                </li>
            {% endfor %}
        </ul>
    {% else %}
        <p>There are no posts...but there should BE!</p>
    {% endif %}
</div>
</div>
{% endblock %}
这是我的一般工作环境

Request Method: GET
Request URL: http://127.0.0.1:8000/blogI/

Django Version: 1.8
Python Version: 3.4.3
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'joins',
 'blog',
 'django_markdown')
有没有人真的遇到过这个问题,尤其是在使用Python3.4和Django 1.8的时候?据我所知,我的问题相当简单,我没有正确编程。我的blog.html文件有问题吗?我的“视图”文件中的BlogIndex类呢?我一直怀疑我的BlogIndex函数编码错误,但如果这是好的,那么可能是我的“blog”模板不对;也许两者都有。在这一点上,任何形式的帮助对我来说都是进步。谢谢

编辑: 的语法是

您在render语句中没有提到请求。 尝试:

编辑: 的语法是

您在render语句中没有提到请求。 尝试:


方法
get\u queryset
应该只返回一个queryset,而不应该在那里呈现模板或返回字典

试试下面的方法

class BlogIndex(ListView): 
    model = models.Post
    template_name = "blog.html"
        def get_queryset(self):
            return models.Post.objects.filter(publish=timezone.now()).order_by('publish')
在模板中,反复浏览
post\u列表
,而不是
posts

{% for post in posts %}

最后,您可以通过覆盖
blog.html
中的内容块,然后从基本模板中删除
blog\u条目
块来简化模板。

方法
get\u queryset
应该只返回一个queryset,而不应该在那里呈现模板或返回字典

试试下面的方法

class BlogIndex(ListView): 
    model = models.Post
    template_name = "blog.html"
        def get_queryset(self):
            return models.Post.objects.filter(publish=timezone.now()).order_by('publish')
在模板中,反复浏览
post\u列表
,而不是
posts

{% for post in posts %}

最后,您可以通过覆盖
blog.html
中的内容块,然后从基本模板中删除
blog\u条目
块来简化模板。

您将得到错误
get\u queryset()缺少1个必需的位置参数:“request”
,因为您在
get\u queryset()
方法中将
request
定义为参数,但在实际Django代码的
get\u queryset()
中,
request
不是它的参数。只需将
request
作为参数从
get\u queryset()
中删除,它就可以工作了

另外,您需要在
get_queryset()
方法中返回
queryset
,而不是在那里执行所有渲染和其他操作。
get\u queryset
的目的是仅返回
queryset

最终代码应为:

from django.shortcuts import render 
from . import models # so I can import 'Post'
from django.views.generic.list import ListView 
from django.utils import timezone

class BlogIndex(ListView): 

    model = models.Post
    template_name = "blog.html"

    def get_queryset(self):
        return models.Post.objects.filter(publish=timezone.now()).order_by('publish')

您得到的错误是
get\u queryset()缺少1个必需的位置参数:'request'
,因为您在
get\u queryset()
方法中将
request
定义为一个参数,但在实际Django代码的
get\u queryset()
中,
request
不是它的参数。只需将
request
作为参数从
get\u queryset()
中删除,它就可以工作了

另外,您需要在
get_queryset()
方法中返回
queryset
,而不是在那里执行所有渲染和其他操作。
get\u queryset
的目的是仅返回
queryset

最终代码应为:

from django.shortcuts import render 
from . import models # so I can import 'Post'
from django.views.generic.list import ListView 
from django.utils import timezone

class BlogIndex(ListView): 

    model = models.Post
    template_name = "blog.html"

    def get_queryset(self):
        return models.Post.objects.filter(publish=timezone.now()).order_by('publish')

我甚至不认为这是一个选择。很有创意,但我试过了,还是没有改变。这很奇怪。好吧,有一些进展,尽管仍然有问题(但确实有进展)。我将render作为输入添加到我的“get_queryset()”,并将其放在输出中,但现在的错误是:get_queryset()缺少1个必需的位置参数:“request”…这到底意味着什么?在这种情况下,我不记得必须对“请求”做更多的事情。让我们看看还有什么问题,它已经消失了。目前我的问题是/blogI/lets上的一个类型错误,清除上面的所有内容并粘贴新的回溯,我甚至不认为这是一个选项。很有创意,但我试过了,还是没有改变。这很奇怪。好吧,有一些进展,尽管仍然有问题(但确实有进展)。我将render作为输入添加到我的“get_queryset()”,并将其放在输出中,但现在的错误是:get_queryset()缺少1个必需的位置参数:“request”…这到底意味着什么?在这种情况下,我不记得必须对“请求”做更多的事情。让我们看看还有什么问题,它已经消失了。目前我的问题是/blogI/lets上的TypeError,请清除上面的所有内容并粘贴新的回溯谢谢您的解决方案。这类似于我最初的解决方案,它只是给我留下了一张空白板,仍然没有可用的帖子查询列表,所以我不知道从那里去哪里。顺便说一句:我最终编辑了这个问题,因为根据你和Ajay Gupta分享的内容,我认为我从第一个问题中找到了一个合理的出路,但现在我仍然无法找到如何在我的博客页面上列出我的帖子。你有什么线索吗?我一直怀疑我的BlogIndex函数编码错误,但如果没有问题,那么它可能是我的“博客”模板。请编辑您的问题并显示您的基本模板。我猜它没有块
{%block blog\u entries%}
我添加了它,但我认为该块是有效的,因为标题“Articles”显示出来了,但没有其他内容。谢谢你的解决方案。这类似于我最初的解决方案,它只是给我留下了一张空白板,仍然没有可用的帖子查询列表,所以我不知道从那里去哪里。顺便说一句:我最终编辑了这个问题