/ board / boards中的TemplateDoesNotExist

时间:2018-11-28 06:21:04

标签: python django templates

在python django项目期间出现此错误
我不明白为什么模板无法连接。
请让我知道错误的哪一部分,并让我知道如何解决。
我该怎么办?
附上错误图片。 enter image description here


settings.py

INSTALLED_APPS = [
    --- skip ---
    board.apps.BoardConfig',
]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

这些是我的项目子列表

/mysite
    /board
        /migrations
        /templates
            /board
                board_list.html
                board_detail.html
                search.html
        __init__.py
        admin.py
        apps.py
        forms.py
        models.py
        tests.py
        urls.py
        views.py
    /mysite
        __init__.py
        settings.py
        urls.py
        views.py
        wsgi.py
    /static
        css
        js
        image
    /templates
        base.html
        main.html
    db.sqlite3
    manage.py

/mysite/mysite/urls.py

from django.contrib import admin
from django.conf.urls import url, include
from .views import MainHome

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', MainHome.as_view(), name='main'),
    url(r'^board/', include('board.urls', namespace='board'),
]

/mysite/board/urls.py

from django.conf.urls import url
from .views import *
from mysite.views import MainHome

app_name = 'board_app'

urlpatterns = [
    url(r'^$', MainHome.as_view(), name='main'),
    url(r'^search/$', SearchFormView.as_view(), name='search'),
    url(r'^boards/$', BoardList.as_view(), name='board_list'),
    url(r'^boards/(?P<slug>[-\w]+)/$', BoardDetail.as_view(), name='board_detail'),
]

/ mysite / borad / views

from .models import Board
from django.views.generic import ListView
--- skip ---

class BoardList(ListView):
    model = Board
    template_name = 'board_list.html'
    content_object_name = 'boards'
    paginate_by = 10

--- skip ---

3 个答案:

答案 0 :(得分:1)

/mysite/borad/views中,您拥有:

template_name = 'board_list.html'

替换为:

template_name = 'board/board_list.html'

因为board_list.html位于templates/board内部。

编辑

settings.py中,您拥有:

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

,这意味着Django将在您的mysite/templates文件夹中查找模板。像这样删除它:

'DIRS': []

因此,默认情况下,Django会在templates/目录中查找每个已安装的应用程序。

答案 1 :(得分:0)

您的模板在电路板目录中。而且您的模型模板名称未引用该路径。

在您的class BoardList中添加template_name = 'board/board_list.html'

答案 2 :(得分:0)

我会尝试一种系统的方法:

  • 在settings.py中,定义 TEMPLATE_DIR = os.path.join(BASE_DIR,'templates')
  • 鉴于您的目录结构,您的应用名称为 board ,而不是 board_app 。因此,设置INSTALLED_APPS = [...,'board']。另外,我不明白您的代码中为什么您引用board.apps.BoardConfig而不是board,也许我遗漏了一些东西
  • TEMPLATES = [{.... 'DIRS':[TEMPLATE_DIR] ,...}]将使事情更加可见
  • 在board app的urls.py中,设置 app_name=board
  • 在views.py中,如果您对文件/目录使用Django命名约定,则无需为基于类的视图指定模板名称。如果您的模板位于template_name = 'board_list.html
  • 中,请删除board/templates/board/board_list.html

此外,执行这些更改后,请重新启动服务器。 这有帮助吗?