覆盖 Django 中的模板

Overriding a template in Django

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

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

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

from user_sessions.views import SessionListView

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

然后我将 url 添加到我的 urls.py

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

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

但不知为何,我还是看不到MY模板出现,而是一直出现模块的模板。谁能帮我找出我做错了什么?

默认情况下 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 上的文档。