首页 > 解决方案 > 有什么方法可以更改 Django 用于在基于通用类的视图中定位文件的默认路径?

问题描述

所以我正在制作一个博客网站。我正在使用 Class Bases Views 让用户能够添加帖子、查看帖子、更新和删除它们。所以在我的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_detail.html。但是该网站说找不到 post_detail.html 模板。

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

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

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

注意:我已经在“dirs”中的 settings.py 中注册了我的模板文件夹,如下所示 'DIRS': ['templates'],

谢谢

标签: djangodjango-viewsdjango-urls

解决方案


如果您需要注册项目的模板目录文件夹,则需要修改的设置DIRSTEMPLATES.

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

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

如果APP_DIRSoption 设置为Truein TEMPLATES,那么这是您post_detail.html应该出现的相对路径。

blog_app/templates/blog_app/post_detail.html

推荐阅读