Django-tables2 链接到项目的其他应用程序:TemplateDoesNotExist 错误

问题描述 投票:0回答:1

由于我的项目较大,因此我有多个应用程序,每个应用程序都有一些数据库表(每个表都在自己的文件中): 项目

    --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。我缺少什么?

django django-tables2 linkify
1个回答
0
投票

它可能正在寻找

all/
,因为探测器有
app_label='all'

解决方案是显式设置ProbeDetailView类中的

template_name

class ProbeDetailView(DetailView):
    model=Probe
    template_name = 'overview/probe_detail.html'
© www.soinside.com 2019 - 2024. All rights reserved.