编辑:正如@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中定义的标题和那种东西,我真的不知道为什么它没有被加载。
一如既往,非常感谢你的帮助,对不起,如果这是非常基本的问题,但到目前为止我还没有找到任何解决方案。
答案 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 %}