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

Python Django:我的模板没有加载/被调用,python,django,django-models,django-forms,django-templates,Python,Django,Django Models,Django Forms,Django Templates,编辑:正如@HåkenLid所说,我应该在两篇单独的帖子中问这个问题,第一个问题(关于模板)已经回答了 我是刚到Django的,到目前为止,我一直玩得很开心。我试图建立一个有趣的博客,但我遇到了一些问题 以下是我的模型、表单、URL、视图和文件树: 对于第一个问题:(为了节省空间,我只添加了每个文件的一部分) #blog/views.py 类BlogDetail(generic.DetailView): 模型=输入 template\u name=“blog/entry\u detail.ht

编辑:正如@HåkenLid所说,我应该在两篇单独的帖子中问这个问题,第一个问题(关于模板)已经回答了

我是刚到Django的,到目前为止,我一直玩得很开心。我试图建立一个有趣的博客,但我遇到了一些问题

以下是我的模型、表单、URL、视图和文件树:

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

#blog/views.py
类BlogDetail(generic.DetailView):
模型=输入
template\u name=“blog/entry\u detail.html”
#blog/templates/blog/entry_detail.html
{%extends“base.html”%}
{%load django_markdown%}

{{object.creation_date}| 在{object.tags.all | join:“,”}下标记

{{object.body | markdown}} #blog/url.py urlpatterns=模式( '', url(r'^$',views.BlogIndex.as_view(),name=“index”), url(r'^entry/(?P\S+)$,views.blogdail.as_view(),name=“entry_detail”), ) #blog/models.py 类条目(models.Model): title=models.CharField(最大长度=100) body=models.TextField() slug=models.SlugField(最大长度=100,唯一性=True) 创建日期=模型.DateTimeField(可编辑=假) publication_date=models.DateTimeField(可编辑=False,null=True) 修改日期=模型.DateTimeField(可编辑=假) author=models.ForeignKey(用户) 类别=模型。多个多个字段(类别) 标记=型号。ManyToManyField(标记) objects=EntryQuerySet.as_manager() 定义(自我): 返回自己的标题 def最近发布(自我): now=datetime.datetime.now()
return now-datetime.timedelta(days=1)对于第1部分,我认为问题在于您的正则表达式:

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

r'^entry/(?P<slug>[-\w\d]+)/'
r'^entry/(?P[-\w\d]+)/'
因为您当前的模式没有捕获slug,所以它没有被加载到上下文中


对不起,我在第二部分帮不了什么忙。如果您在自己的视图中执行此操作,您可以覆盖CBV的
form\u 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 %}
#blog/templates/blog/entry_detail.html
{%extends“base.html”%}
{%load django_markdown%}
{%block content%}

{{object.creation_date}| 在{object.tags.all | join:“,”}下标记

{{object.body | markdown}} {%endblock内容%}
对不起,我刚刚注意到我从第二个模式中省略了
条目/
。尝试编辑的模式-这样做有效吗?是的,我在发布评论之前已经尝试过了,我相信正则表达式(至少现在)没有问题,只是为了测试,如果用
pk
替换URL模式中的
slug
,会发生什么?
DetailView
通过在URL中查找这两种内容之一来获取要显示的对象。如果它能与PK一起工作,但不是slug,则可能是您的slug保存方式有问题或类似问题。我在浏览器URL中首先将slug替换为PK,404未找到与查询匹配的博客条目。然后我在正则表达式和模板中将slug替换为pk,它的工作原理与slug完全相同,只是每个条目都有一个id,而不是slug。最好将每个问题作为单独的帖子提问,因为它们似乎没有关联。“我不了解条目的详细信息,只是base.html中定义的标题之类的内容。”你能解释一下出现了什么吗?这一点很不清楚。@HåkenLid我不想发太多垃圾邮件,我认为既然他们在同一个项目上/使用同一个框架,就可以一起问他们。我想说的是,我应该看到entry_detail.html的内容、标题、创建日期、标记和特定条目的主体。我正在上传一个截图。编辑:这里是条目详细信息应该呈现的位置:你确定blogs.url包含在项目的主url.py中吗?我想是这样,像这样?urlpatterns=patterns(“”,url(r'^admin/”,include(admin.site.url)),url(r'^markdown/”,include('django_markdown.url')),url(r'^',include('blog.url'),)谢谢,我总是需要块吗?我将进一步研究模板。扩展和块一起工作。如果不将内容放在块中的子模板中,django就不可能知道它应该放在父模板中的什么位置。
#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 %}