Django:我的模板没有被调用 loading/being

Django: My template is not loading/being called

编辑:正如@HåkenLid 所说,我应该将其作为 2 个单独的帖子提出,第一个问题(关于模板)已得到解答!

我是 Django 的新手,到目前为止我一直玩得很开心。我正在尝试建立一个博客来娱乐,但我 运行 遇到了一些问题。

这是我的模型、表单、url、视图和文件树:

http://i.imgur.com/KsLV3d9.png

对于第一个问题:(为了保存space我只添加了每个文件的一部分)

#blog/views.py
class BlogDetail(generic.DetailView):
model = Entry
template_name = "blog/entry_detail.html"


#blog/templates/blog/entry_detail.html
{% extends "base.html" %}
{% load django_markdown %}

<div class="post">
  <h2><a href="{% url "entry_detail" slug=object.slug %}">{{ object.title }}</a></h2>
  <p class="meta">
    {{ object.creation_date }} |
    Tagged under {{  object.tags.all|join:", " }}
  </p>
  {{ object.body|markdown }}
</div>


#blog/urls.py
urlpatterns = patterns(
    '',
    url(r'^$', views.BlogIndex.as_view(), name="index"),
    url(r'^entry/(?P<slug>\S+)$', views.BlogDetail.as_view(), name="entry_detail"),
)


#blog/models.py
class Entry(models.Model):
    title = models.CharField(max_length=100)
    body = models.TextField()
    slug = models.SlugField(max_length=100, unique=True)
    creation_date = models.DateTimeField(editable=False)
    publication_date = models.DateTimeField(editable=False, null=True)
    modification_date = models.DateTimeField(editable=False)

    author = models.ForeignKey(User)
    categories = models.ManyToManyField(Category)
    tags = models.ManyToManyField(Tag)

    objects = EntryQuerySet.as_manager()

    def __str__(self):
        return self.title

    def was_published_recently(self):
        now = datetime.datetime.now()
        return now - datetime.timedelta(days=1) <= self.publication_date <= now

    def is_published(self):
        return self.publication_date is not False

    is_published.boolean = True
    is_published.short_description = 'Is it Published?'

    def get_absolute_url(self):
        return reverse("entry_detail", kwargs={"slug": self.slug})

    class Meta():
        verbose_name = "Blog Entry"
        verbose_name_plural = "Blog Entries"
        ordering = ['-creation_date']

    def save(self, *args, **kwargs):
        """ On save, update timestamps """
        if not self.id:
            self.creation_date = datetime.datetime.now()
        self.modification_date = datetime.datetime.now()
        return super(Entry, self).save(*args, **kwargs)

当我输入类似

的内容时

localhost:8000/entry/this-is-an-entry-title-slug

e.j: http://i.imgur.com/c7yir79.png

我不知道条目的详细信息,只是 base.html 中定义的标题之类的东西,我真的不知道为什么它没有被加载。

一如既往,非常感谢您的帮助,如果这是非常基本的问题,我深表歉意,但到目前为止我还没有找到任何解决方案。

对于第 1 部分,我认为问题出在您的正则表达式上:

r'^entry/(?P<slug>\S+)$

应该是:

r'^entry/(?P<slug>[-\w\d]+)/'

由于您当前的模式没有捕获 slug,因此它没有被加载到上下文中。

我对第 2 部分帮助不大,抱歉。如果您在自己的视图中执行此操作,则可以覆盖 CBV 的 form_valid 方法,但我不确定如何在内置管理面板中完成相同的操作。

扩展模板时需要使用 {% block %}

如果您在 base.html 中有一个名为 'content' 的块,您可以这样做:

#blog/templates/blog/entry_detail.html
{% extends "base.html" %}
{% load django_markdown %}
{% block content %}
<div class="post">
  <h2><a href="{% url "entry_detail" slug=object.slug %}">{{ object.title }}</a></h2>
  <p class="meta">
    {{ object.creation_date }} |
    Tagged under {{  object.tags.all|join:", " }}
  </p>
  {{ object.body|markdown }}
</div>
{% endblock content %}