python - Django 正在从错误的应用程序加载模板
问题描述
我的电子学习应用程序下有一个名为 home() 的视图,它应该从应用程序的目录中加载 index.html。相反,它从不同的应用程序 (symposium/templates/index.html) 加载 index.html 的实例。它应该从 (elearning/templates/index.html) 加载它。
有人可以解释为什么会发生这种情况以及如何解决吗?
# Settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# Machina dependencies:
'mptt',
'haystack',
'widget_tweaks',
# Machina apps:
'machina',
'machina.apps.forum',
'machina.apps.forum_conversation',
'machina.apps.forum_conversation.forum_attachments',
'machina.apps.forum_conversation.forum_polls',
'machina.apps.forum_feeds',
'machina.apps.forum_moderation',
'machina.apps.forum_search',
'machina.apps.forum_tracking',
'machina.apps.forum_member',
'machina.apps.forum_permission',
# SCORM apps:
'accounts',
'symposium',
'elearning']
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'templates'), MACHINA_MAIN_TEMPLATE_DIR,],
'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',
'machina.core.context_processors.metadata',
],
},
},
]
# root urls.py
from django.contrib import admin
from django.urls import path, include
from machina import urls as machina_urls
from accounts.views import CreateUser
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [
path('forum/',include(machina_urls)),
path('admin/', admin.site.urls),
path('createuser',CreateUser.as_view()),
path('symposium/', include('symposium.urls')),
path('elearning/', include('elearning.urls')),
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
# elearning app urls.py
from django.urls import include, path
from . import views
app_name = 'elearning'
urlpatterns = [
path('', views.home, name='home'),
]
# app: elearning/views.py
from django.shortcuts import render
# Create your views here.
def home(request):
return render(request,'index.html',{})
# index.html location
elearning templates : ./elearning/templates/index.html
解决方案
Django 在每个应用程序中搜索模板文件夹,以获取要呈现的相关模板。看起来它发现的第一个index.html
来自symposium
应用程序。
模板目录结构的约定是将模板放在具有应用程序名称的另一个文件夹中,以避免使用同名模板时出现这种情况。
将您的index.html
文件从
/elearning/templates/index.html
至
/elearning/templates/elearning/index.html
然后将您的主页视图功能更改为
def home(request):
return render(request,'elearning/index.html',{})
同样对应用程序中index.html
文件的位置执行相同的操作symposium
。
推荐阅读
- google-cloud-platform - gcp ml-engine 上的 VGG 非常慢
- python - 使用 TensorFlow 从我自己的数据中使用 VGGnet 进行特征提取?
- angular - Angular:未捕获的 ReferenceError:未定义进程
- ios - 当在 nib 中声明 UITableView 时,UITableViewCell nil IBOutlets
- c# - C# dotnetzip。无法将密码添加到存档
- javascript - 开玩笑期望猫鼬时间戳
- vba - VBA 和 Word:剪切文本框名称以匹配书签的名称
- python - 来自json文件的Scipy稀疏
- c# - 如何从数据库中删除多对多属性
- javafx - JavaFX中的旋转ImageView