Python Url未在pinax项目博客中运行正确的视图
最后提到的问题 所以我安装了pinax博客应用程序,并将其添加到我安装的应用程序中,迁移并设置其所有依赖项。 然后,我将其添加到项目中的urlpatterns中: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
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 %}