Python 如何在其他应用程序中使用project中的模板?
我正在考虑在我的项目中组织所有模板:scolarte 根据这一问题的建议: 如果你想不出一个明显的地方来放置你的模板,我们 建议在Django项目中创建模板目录 i、 例如,在您在第2章中创建的mysite目录中,如果您 我们一直在跟随我们的例子 但我需要从另一个应用程序调用它。已调用视图,但获取错误:Python 如何在其他应用程序中使用project中的模板?,python,django,Python,Django,我正在考虑在我的项目中组织所有模板:scolarte 根据这一问题的建议: 如果你想不出一个明显的地方来放置你的模板,我们 建议在Django项目中创建模板目录 i、 例如,在您在第2章中创建的mysite目录中,如果您 我们一直在跟随我们的例子 但我需要从另一个应用程序调用它。已调用视图,但获取错误: TemplateDoesNotExist at /cuentas/ingreso/ scolarte/templates/scolarte/registration/signup.html 我
TemplateDoesNotExist at /cuentas/ingreso/
scolarte/templates/scolarte/registration/signup.html
我甚至尝试将模板的完整路径放在project文件夹中:
角色/视图.py:
角色/url.py:
scolarte/url.py
我的应用程序组织如下:
roles
|_migrations
|_templates
...
|_urls.py
|_views.py
scolarte #project name
|_templates
|_scolarte
|_registration
|_signup.html
|_setting.py
|_urls.py
setting.py
更新1:
角色应用程序:
**角色应用程序-view.py**:
更新2:
根据标准Django约定,模板的路径是不正确的,但首先让我向您展示如何修复它。您要做的是确保在settings.py中设置了这些设置。这来自Django3.0新创建的项目
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
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',
],
},
},
]
如果您使用这些,请按照建议的目录结构:
scolarte
|_scolarte
|_settings.py
|_urls.py
(etc..)
|_templates
|_scolarte
|_registration
|_signup.html
然后您可以使用此路径:
template_name = 'scolarte/registration/signup.html'
您是否在您的设置中添加了[os.path.joinBASE_DIR,'templates']。查看我在底部添加的设置部分。我正在使用所有这些参数,尝试使用template_name='scolarte/registration/signup.html'但没有成功。请参阅更新1。我习惯于将所有模板放在核心应用程序中而不是项目中。我说过要这样做,但看到了一个教程,其中模板位于project文件夹中。惯例是使用appfolder或project folder?根据此链接,项目是放置模板的最合适的位置:查看更新1,模板与settings.py位于同一目录中,等等。如果您使用Django cli工具创建一个新项目,则会将其置于该目录之上一个目录。正如您所说,他们曾经建议这样做,但建议的约定在某个时候发生了变化,创建了一个顶级项目目录,然后在其中创建了另一个同名目录,其中包含settings.py、主urlconf等。这是在模板设置没有那么复杂的时候出现的。这种布局可以很好地添加到PYTHONPATH中,但我正在偏离主题。你能在回答中说明这一点吗?如果您从Django cli工具创建一个新项目,它将把它放在上面一个目录。我可以更改此文件夹的位置,因为这是一个新的Django项目。
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',
],
},
},
]
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
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',
],
},
},
]
scolarte
|_scolarte
|_settings.py
|_urls.py
(etc..)
|_templates
|_scolarte
|_registration
|_signup.html
template_name = 'scolarte/registration/signup.html'