Python Url未在pinax项目博客中运行正确的视图

Python Url未在pinax项目博客中运行正确的视图,python,django,blogs,pinax,Python,Django,Blogs,Pinax,最后提到的问题 所以我安装了pinax博客应用程序,并将其添加到我安装的应用程序中,迁移并设置其所有依赖项。 然后,我将其添加到项目中的urlpatterns中: urlpatterns = [ path('admin/', admin.site.urls), url(r"^blog/", include("pinax.blog.urls", namespace="pinax_blog")), url(r&quo

最后提到的问题

所以我安装了pinax博客应用程序,并将其添加到我安装的应用程序中,迁移并设置其所有依赖项。 然后,我将其添加到项目中的urlpatterns中:

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r"^blog/", include("pinax.blog.urls", namespace="pinax_blog")),
    url(r"^ajax/images/", include("pinax.images.urls", namespace="pinax_images")),
]

pinax.blog.url中的urpatterns是:

urlpatterns = [
    url(r"^$", BlogIndexView.as_view(), name="blog"),
    url(r"^section/(?P<section>[-\w]+)/$", SectionIndexView.as_view(), name="blog_section"),
    url(r"^post/(?P<post_pk>\d+)/$", StaffPostDetailView.as_view(), name="blog_post_pk"),
    url(r"^post/(?P<post_secret_key>\w+)/$", SecretKeyPostDetailView.as_view(), name="blog_post_secret"),
    url(r"^feed/(?P<section>[-\w]+)/(?P<feed_type>[-\w]+)/$", blog_feed, name="blog_feed"),

    # authoring
    url(r"^manage/posts/$", ManagePostList.as_view(), name="manage_post_list"),
    url(r"^manage/posts/create/$", ManageCreatePost.as_view(), name="manage_post_create"),
    url(r"^manage/posts/(?P<post_pk>\d+)/update/$", ManageUpdatePost.as_view(), name="manage_post_update"),
    url(r"^manage/posts/(?P<post_pk>\d+)/delete/$", ManageDeletePost.as_view(), name="manage_post_delete"),

    url(r"^ajax/markdown/preview/$", ajax_preview, name="ajax_preview")
]
问题:


当我运行服务器并转到BlogIndexView时,应该根据pinax_blog的url模式的第一个url模式工作,并且应该加载模板_name=“pinax/blog/blog_list.html”。但是该模板不会加载另一个名为site_base.html的模板。你知道为什么吗?

blog\u list.html
扩展了
blog\u base.html
,这反过来又扩展了
site\u base.html

如果您向下跟踪
site\u base.html
(可能是在虚拟环境中),您会发现它没有提供要由扩展它的模板填充的块。相反,它包含以下评论:

{# This template intentionally left blank to satisfy test suites. Your project should always provide a site_base.html itself. #}
因此,您需要在项目中提供一个
site\u base.html
,它将覆盖pinax提供的存根

首先,您的
站点_base.html
可以提供正文块:

{% block body %}{% endblock %}
将其保存在
/templates/site_base.html
中,并确保在
pinax.blog
之前将应用程序添加到
已安装的应用程序中(在项目的
设置.py
),以便模板加载程序在
pinax blog
中覆盖的模板之前发现其模板

该模板不会加载另一个名为site_base.html的模板。你知道为什么吗

我想这里的问题是回答为什么模板加载site_base.html而不显示任何内容。现在,上面的答案是正确的,但是让我来帮助提问的人克服挫折,以获得更清晰的答案

这是因为site_base.html没有任何可以扩展的块,因此加载时不会显示任何内容

{# This template intentionally left blank to satisfy test suites. Your project should always provide a site_base.html itself. #}
因此,只需将这段代码添加到site_base.html

{% block body %}{% endblock %}

将为您提供一些可见的内容,这就是您所需要做的。

dude,但是blogindexview有template_name=…blog_list.html。所以这不意味着应该呈现blog_index.html吗。是的,blog_index.html确实扩展了站点_base.html,但它有很多额外的东西。我甚至试着放一个带有文本的ptag来检查blog_index.html是否被呈现。但事实证明,即使在视图中有template_name=…blog_list.html,也会呈现站点_base.html。最终呈现的是指定模板的基础模板。如果指定的模板是其自己的基础模板,则将对其进行渲染。在这里的例子中,
blog\u list.html
位于
site\u base.html
。因此,最终,
site_base.html
将被呈现(其块将被扩展它的模板中的匹配块替换)。
{% block body %}{% endblock %}