django - 有什么方法可以更改 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'],
谢谢
解决方案
如果您需要注册项目的模板目录文件夹,则需要修改的设置DIRS
在TEMPLATES
.
'DIRS': [os.path.join(BASE_DIR, 'templates')]
BASE_DIR
如果您使用默认项目模板创建项目,则 将已经存在。
如果APP_DIRS
option 设置为True
in TEMPLATES
,那么这是您post_detail.html
应该出现的相对路径。
blog_app/templates/blog_app/post_detail.html
推荐阅读
- html - 如何制作弹性盒子(不仅是宽度)
- image - 在不调整大小的情况下制作长图像
- android - 无法使用 Kotlin 在 Android 上初始化 Visualizer
- c# - DirectoryEntry Invoke("Members", null) 未检索所有成员
- gpu - 为什么logical_gpus = tf.config.experimental.list_logical_devices('GPU') 会导致一个空列表?
- php - 使用供应商文件夹之外的一些作曲家包部署 GAE 应用程序
- java - 如何修复非线程安全的延迟初始化 CXF 客户端工厂?
- php - Laravel 6.x VerifiesEmails.php 以 $request->route('hash') 失败,通过 $request->get('hash')
- java - 从对象的父类数组中提取子类属性
- javascript - 使用 javascript 发送删除请求