【问题标题】:Overriding a template in Django覆盖 Django 中的模板
【发布时间】:2019-08-11 06:45:58
【问题描述】:

我正在使用this library 在我的 django 项目中添加会话选项卡。我正在使用这一行从我的项目中调用模块的模板:

<li><a href="{% url 'user_sessions:session_list' %}">Sessions</a></li>

它可以工作,但现在我想为页面设置样式,为此我需要用我自己的模板覆盖模块的模板。所以,正如模块所说的here,我自己继承了模块的SessionListView views.py 来覆盖模板:

from user_sessions.views import SessionListView

class MySessionList(SessionListView):
    template_name = 'user_sessions/session_list.html'

然后我将网址添加到我的urls.py

    url(
        regex=r'^account/sessions/$',
        view=MySessionList.as_view(),
        name='sessions',
        ),

然后我在自己的项目中创建了我的模板,该项目的位置如下: templates/user_sessions/session_list.

但由于某种原因,我仍然看不到 MY 模板出现,而是模块的模板不断出现。谁能帮我找出我做错了什么?

【问题讨论】:

  • 代码根本没有说要提供你自己的观点。它说要提供您自己的模板。你的templates 目录相对于你的项目的其余部分在哪里?请出示您的模板设置。
  • 阅读this 了解如何覆盖模板。
  • 看起来问题出在我的 Settings.py 文件上,我不得不将我的导入移到下面的几行。谢谢你的帮助!是的,我需要了解更多关于在 django 中覆盖模板的知识 :)

标签: python django django-templates django-views django-urls


【解决方案1】:

默认情况下SessionListView 已经使用user_sessions/session_list.html,因此不需要您的自定义视图。

听起来 Django 在您的模板之前的 user_sessions 应用程序中找到了 user_sessions/session_list.html 模板。如果您的模板位于应用的 templates 目录中,则可以通过在 INSTALLED_APPS 设置中将应用移至 user_sessions 上方来解决此问题。

或者,如果您将模板移动到 TEMPLATES 设置中的 'DIRS' 列表中的目录,那么 Django 会在检查应用程序模板目录之前找到您的模板。如果您的覆盖模板实际上不属于您的任何应用程序,这会更清晰,另一个优点是您不必重新排序 INSTALLED_APPS 列表。

有关详细信息,请参阅overriding templates 上的文档。

【讨论】:

  • 难以置信,我一直在到处寻找这个问题,但我只需要在我的设置文件上移动一行来解决这个问题,我没有想到这一点。太棒了,谢谢!
  • 更合适的方法是在您的TEMPLATES 设置中添加'APP_DIRS': True,这样您就不必重新订购应用程序。或者在顶层创建一个目录,覆盖模板并使用'DIRS': &lt;path&gt; 指令设置它。我真的不喜欢在INSTALLED_APPS 中的应用程序之后拥有第 3 方应用程序,这并不总是适用于某些类型的应用程序。
  • @dirkgroten 我不确定你的意思是什么已经True(除非在TEMPLATES 中手动启用了应用程序目录加载器)。我同意创建项目的模板目录并设置DIRS 可能会更好。关于如何覆盖模板的文档很好的链接,我以前从未见过该页面。
  • @Alasdair 不会在您的应用程序的 templates 目录中的应用程序模板总是 覆盖其他 3rd 方应用程序模板,无论顺序如何?例如,我已经覆盖了许多 django 管理模板,而没有将我的应用程序放在 django.contrib.admin 之上,只需将模板添加到我的应用程序的 templates/admin/ 目录中。但我在 django 文档中找不到关于查找模板顺序的描述。
  • @dirkgroten 设置'APP_DIRS': True(新项目的默认值)启用app_directories 加载程序。 the app directories loader 的文档说INSTALLED_APPS 的顺序很重要并给出了示例。对于应用目录加载器不管是django.contrib应用、使用pip安装的第三方应用还是项目目录下的应用。
猜你喜欢
  • 2020-02-18
  • 2019-07-11
  • 2017-07-06
  • 2015-04-15
  • 2017-08-23
  • 2015-03-16
  • 2013-01-23
  • 2012-08-21
  • 2011-07-21
相关资源
最近更新 更多