我在MacOs Catalina OS上使用manage.py runserver
作为开发。我有一些模板适合我内置的基于类的视图。例如:
CuadroDeControl_detail.html LoteDeMedio_list.html TipoDeMedio_detail_tablaCuadros.html
CuadroDeControl_detail_resumen.html LoteDeMedio_list_tabla.html TipoDeMedio_list.html
CuadroDeControl_detail_tablaMetodos.html MetodoDeControl_detail.html TipoDeMedio_list_tabla.html
LoteDeMedio_confirm_delete.html MetodoDeControl_detail_resumen.html dropdown_CuadroDeControl.html
LoteDeMedio_create.html TipoDeMedio_confirm_delete.html dropwdown_CuadroDeControl.html
LoteDeMedio_detail.html TipoDeMedio_detail.html
LoteDeMedio_detail_resumen.html TipoDeMedio_detail_resumen.html
以下是工作视图的示例:
class TipoDeMedioDetailView(AreaCalidadMixin, DashboardMixin, DetailView):
model = TipoDeMedio
请注意,我的视图没有显式地设置template_name
。在我的作品中
环境,我所有的视图加载都很好。Django的模板加载器知道视图对应的模板是TipoDeMedio_detail.html
但是,在我的生产环境中,在Ubuntu 20.04.2 LTS x86_64 Linode VM上使用apache2
和mod_wsgi
设置,模板加载器无法加载同一视图的模板,因为它使用所有小写字母搜索模板。以下是一个例子:
Request Method: GET
Request URL: http://45.79.4.38/calidad/TipoDeMedio/lista
Django Version: 3.1.6
Exception Type: TemplateDoesNotExist
Exception Value:
calidad/tipodemedio_list.html
Exception Location: /home/jonatan/django-app/venv/lib/python3.8/site-packages/django/template/loader.py, line 47, in select_template
Python Executable: /home/jonatan/django-app/venv/bin/python
Python Version: 3.8.5
Python Path:
['/home/jonatan/django-app/mysite',
'/usr/lib/python38.zip',
'/usr/lib/python3.8',
'/usr/lib/python3.8/lib-dynload',
'/home/jonatan/django-app/venv/lib/python3.8/site-packages']
Server time: Mon, 21 Jun 2021 18:24:19 -0500
Template-loader postmortem
Django tried loading these templates, in this order:
Using engine django:
django.template.loaders.filesystem.Loader: /home/jonatan/django-app/mysite/templates/calidad/tipodemedio_list.html (Source does not exist)
django.template.loaders.app_directories.Loader: /home/jonatan/django-app/mysite/login/templates/calidad/tipodemedio_list.html (Source does not exist)
django.template.loaders.app_directories.Loader: /home/jonatan/django-app/venv/lib/python3.8/site-packages/django/contrib/admin/templates/calidad/tipodemedio_list.html (Source does not exist)
django.template.loaders.app_directories.Loader: /home/jonatan/django-app/venv/lib/python3.8/site-packages/django/contrib/auth/templates/calidad/tipodemedio_list.html (Source does not exist)
一个简单的修复方法是在我的每个CBV
上手动指定我的template_name
属性,并指向正确的区分大小写的模板名称(例如TipoDeMedio_detail.html
。但是,我确实希望避免这种情况
我只是想了解环境之间行为变化的根本原因。这让我相信,在Django行为的其他方面,我也会遇到类似的问题
MattRowbum向我指出APFS不区分大小写。我认为这是对行为变化的充分解释。
默认的Apple文件系统(APFS)不区分大小写。这意味着,在Mac开发过程中,Django能够找到模板,即使文件名的大小写不正确
现在您已经迁移到Ubuntu,它默认使用区分大小写的文件系统。如果案例错误,Django无法找到模板
注意Django docs for class-based generic views状态:
更好的解决方案是使用小写字母重命名模板
相关问题 更多 >
编程相关推荐