Django:我的模板没有加载/被调用

时间:2015-01-16 01:21:32

标签: python django django-models django-forms django-templates

编辑:正如@HåkenLid所说,我应该将此作为2个单独的帖子,第一个问题(关于模板)已经回答了!

我是Django的新手,到目前为止我一直很开心。我正在尝试建立一个有趣的博客,但我遇到了一些问题。

以下是我的模型,表单,网址,视图和文件树:

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

对于第一个问题:(为了节省空间,我只添加了每个文件的部分)

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

当我输入类似

的内容时
  

本地主机:8000 /进入/这-是-AN-入门标题段塞

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

我没有得到条目的细节,只是base.html中定义的标题和那种东西,我真的不知道为什么它没有被加载。

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

2 个答案:

答案 0 :(得分:1)

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

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

应该是:

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

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

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

答案 1 :(得分:1)

扩展模板时,您需要使用{%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 %}