由于我的项目较大,因此我有多个应用程序,每个应用程序都有一些数据库表(每个表都在自己的文件中): 项目
--project
-all
-overview
-home
在 all/probe_list.html 中,我有一个显示 Probe 对象的表格。我想将探针名称链接到概述应用程序中的详细信息页面 (overview/probe_details.html)。该链接有效并显示正确的 URL 127.0.0.1:8000/overview/probe_detail/1 但我收到 TemplateDoesNotExist 错误,因为 django 搜索 all/probe_detail.html。
项目/urls.py
urlpatterns = [
path('', include('home.urls')),
path('all/', include('all.urls', namespace='all')),
path('overview/', include('overview.urls', namespace='overview')),
]
所有/urls.py
app_name = 'all'
urlpatterns = [
path('probe_list', views.AllProbesView.as_view()),
]
所有/模型/probe.py
class Probe(Compound):
targetName = models.CharField(max_length = 100, verbose_name="Target(s)")
inVivoActivity = models.CharField(max_length=10, verbose_name="In vivo use");
mechanismOfAction = models.CharField(max_length = 255, verbose_name="Mechanism")
def get_absolute_url(self):
return reverse('overview:probe_detail', args=[str(self.id)])
def __str__(self):
return f'{self.name}, {self.targetName}, {self.mechanismOfAction},{self.inVivoActivity}'
class Meta:
app_label = 'all'
所有/表.py
class AllProbesTable(tables.Table):
name = tables.Column(linkify=True)
class Meta:
model = Probe
template_name = "django_tables2/bootstrap5-responsive.html"
sequence = ("targetName", "name", "mechanismOfAction" ,"inVivoActivity",)
exclude = ("id",)
全部/views.py
class AllProbesView(SingleTableView):
model = Probe
table_class = AllProbesTable
queryset = Probe.objects.all()
template_name = "all/probe_list.html"
所有/模板/所有/probe_list.html
{% load render_table from django_tables2 %}
{% render_table table %}
概述/urls.py
app_name = 'overview'
urlpatterns = [
path('probe_detail/<int:pk>', views.ProbeDetailView.as_view(), name="probe_detail"),
]
overview/views.py(尚未准备好)
class ProbeDetailView(DetailView):
model=Probe
overview/templates/overview/probe_detail.html(尚未准备好)
{% extends 'baseHeaderIcon.html' %}
{% block header %}Probe details{% endblock header %}
如果我点击链接,我会得到:
TemplateDoesNotExist at /overview/probe_detail/1
all/probe_detail.html
Request Method: GET
Request URL: http://127.0.0.1:8000/overview/probe_detail/1
Django Version: 5.0.1
Exception Type: TemplateDoesNotExist
Exception Value: all/probe_detail.html
Raised during: overview.views.ProbeDetailView
Python Version: 3.12.1
它搜索 all/probe_detail.html 而不是overview/probe_detail.html。我缺少什么?
它可能正在寻找
all/
,因为探测器有 app_label='all'
。
解决方案是显式设置ProbeDetailView类中的
template_name
。
class ProbeDetailView(DetailView):
model=Probe
template_name = 'overview/probe_detail.html'