有什么方法可以更改 Django 用于在基于 class 的通用视图中定位文件的默认路径吗?

Is there any way to change the default path which Django will use to locate files in generic class based views?

所以我正在制作一个博客网站。我正在使用 Class Bases Views 让用户能够添加 post、查看 post、更新和删除它们。所以在我的 views.py 中,我有这个:

from django.shortcuts import render, HttpResponse
from .models import Post
from django.views.generic import ListView, DetailView

# Create your views here.


def home(request):

    context = {
        'posts': Post.objects.all()
    }

    return render(request, 'index.html', context)


class PostListView(ListView):
    model = Post
    template_name = 'index.html'
    context_object_name = 'posts'
    ordering = ['-date_posted']


class PostDetailView(DetailView):
    model = Post

我的urls.py:

from django.urls import path
from . import views
from .views import PostListView, PostDetailView

urlpatterns = [
    path('', PostListView.as_view(), name="home"),
    path('post/<int:pk>/', PostDetailView.as_view(), name="post-detail"),
]

问题出在 PostDetailView 中。当我在我的模板文件夹中创建一个名为 post_detail.html 的文件时,这样当用户转到网站中的特定 post 时,我们会将他们重定向到 post_detail.html。但是该网站说找不到 post_detail.html 模板。

我了解到基于通用 class 的视图将寻找具有此命名约定的模板,<app>/<module>_<viewtype>.html。所以它将在应用程序名称的目录中查找,在我的例子中,它将是“blog_app”,然后是一个模型名称将是“Post”的模板然后是视图类型。

是否有任何方法可以更改 Django 用于在基于通用 class 的视图中定位文件的默认路径?

这样我就可以告诉 Django 查看我的 templates 文件夹以搜索 post_detail.html 模板。

注意:我已经在“dirs”的settings.py中注册了我的模板文件夹,就像这样 'DIRS': ['templates'],

谢谢

如果您需要注册项目的模板目录文件夹,那么需要修改的设置是TEMPLATES里面的DIRS

'DIRS': [os.path.join(BASE_DIR, 'templates')]

如果您使用默认项目模板创建项目,BASE_DIR 将已经存在。

如果 APP_DIRS 选项在 TEMPLATES 中设置为 True,则 这是您的 post_detail.html 应该存在的相对路径。

blog_app/templates/blog_app/post_detail.html