【问题标题】:TemplateDoesNotExist when displaying a template from another application in a Django project在 Django 项目中显示来自另一个应用程序的模板时的 TemplateDoesNotExist
【发布时间】:2021-09-26 02:48:58
【问题描述】:

我的网站有两个应用程序dos_website,其中包含主页和主页,blog,其中包含新闻:

ubu@DESKTOP-QL4RO3V:/mnt/c/Users/antoi/Documents/Programming/Work/Dos/webapp$ tree -L 1
.
├── README.md
├── __init__.py
├── blog/
├── db.sqlite3
├── dos_website/
├── firstrecord.json
├── firstrecord.txt
├── manage.py
├── requirements.txt
└── website/

3 directories, 7 files

我想访问地址应该是http://127.0.0.1:8000/blog/的我网站的博客页面:

webapp/dos_website/templates/dos_website/base.html

  <head>

    <meta charset="utf-8">

  </head>

  <!-- Navigation -->
  <nav class="navbar navbar-expand-lg navbar-light bg-light fixed-top">
    <div class="container">
      <div class="collapse navbar-collapse" id="navbarResponsive">
        <ul class="navbar-nav ml-auto">
          <li>
            <a role="button" href="{% url 'blog:all_blogs' %}" class="btn btn-primary">Actualités</a>
          </li>
        </ul>
      </div>
    </div>
  </nav>

</html>

重定向首先由管理此页面的 Web 应用程序的 urls.py 文件处理:

webapp/website/urls.py

from django.contrib import admin
from django.urls import path, include
from dos_website import views
from django.conf.urls.static import static
from django.conf import settings

urlpatterns = [
    path('admin/', admin.site.urls),

    # Home
    path('', views.home, name='home'),

    # blog
    path('blog/', include('blog.urls')),

]

因此它被重定向到博客应用程序的urls.py 文件:

webapp/blog/urls.py

from django.contrib import admin
from django.urls import path, include
from . import views

app_name = 'blog'

urlpatterns = [
    path('', views.all_blogs, name='all_blogs'),
]

这是我在博客应用程序中的views.py 文件:

webapp/blog/views.py

from django.shortcuts import render


def all_blogs(request):
    return render(request, 'blog/all_blogs.html')

Sin embargo,tengo un archivo all_blogs.html en mi aplicación de blog:

ubu@DESKTOP-QL4RO3V:/mnt/c/Users/antoi/Documents/Programming/Work/Dos/webapp/blog$ tree -L 3
.
├── __init__.py
├── __pycache__
│   ├── __init__.cpython-39.pyc
│   ├── urls.cpython-39.pyc
│   └── views.cpython-39.pyc
├── admin.py
├── apps.py
├── migrations
│   └── __init__.py
├── models.py
├── templates
│   └── blog
│       └── all_blogs.html   <-- aqui esta
├── tests.py
├── urls.py
└── views.py

但它会返回:

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/blog/

Django Version: 3.2.4
Python Version: 3.9.4
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'dos_website']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']

Template loader postmortem
Django tried loading these templates, in this order:

Using engine django:
    * django.template.loaders.app_directories.Loader: C:\Users\antoi\Documents\Programming\Work\Dos\dos_env\lib\site-packages\django\contrib\admin\templates\blog\all_blogs.html (Source does not exist)
    * django.template.loaders.app_directories.Loader: C:\Users\antoi\Documents\Programming\Work\Dos\dos_env\lib\site-packages\django\contrib\auth\templates\blog\all_blogs.html (Source does not exist)
    * django.template.loaders.app_directories.Loader: C:\Users\antoi\Documents\Programming\Work\Dos\webapp\dos_website\templates\blog\all_blogs.html (Source does not exist)



Traceback (most recent call last):
  File "C:\Users\antoi\Documents\Programming\Work\Dos\dos_env\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "C:\Users\antoi\Documents\Programming\Work\Dos\dos_env\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\antoi\Documents\Programming\Work\Dos\webapp\blog\views.py", line 5, in all_blogs
    return render(request, 'blog/all_blogs.html')
  File "C:\Users\antoi\Documents\Programming\Work\Dos\dos_env\lib\site-packages\django\shortcuts.py", line 19, in render
    content = loader.render_to_string(template_name, context, request, using=using)
  File "C:\Users\antoi\Documents\Programming\Work\Dos\dos_env\lib\site-packages\django\template\loader.py", line 61, in render_to_string
    template = get_template(template_name, using=using)
  File "C:\Users\antoi\Documents\Programming\Work\Dos\dos_env\lib\site-packages\django\template\loader.py", line 19, in get_template
    raise TemplateDoesNotExist(template_name, chain=chain)

Exception Type: TemplateDoesNotExist at /blog/
Exception Value: blog/all_blogs.html

【问题讨论】:

  • 嗨,从上面的堆栈跟踪中,我认为您没有将博客应用添加到已安装的应用中,这可能是问题吗?

标签: python django django-views django-templates django-urls


【解决方案1】:

您的已安装应用程序中没有博客应用程序:

Installed Applications:
[
 'blog',    # <- add your here
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'dos_website'
]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-02
    • 2013-10-01
    • 2023-01-19
    • 2015-02-15
    • 2018-03-24
    • 2010-11-10
    • 2019-07-10
    • 1970-01-01
    相关资源
    最近更新 更多