Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在其他应用程序中使用project中的模板?_Python_Django - Fatal编程技术网

Python 如何在其他应用程序中使用project中的模板?

Python 如何在其他应用程序中使用project中的模板?,python,django,Python,Django,我正在考虑在我的项目中组织所有模板:scolarte 根据这一问题的建议: 如果你想不出一个明显的地方来放置你的模板,我们 建议在Django项目中创建模板目录 i、 例如,在您在第2章中创建的mysite目录中,如果您 我们一直在跟随我们的例子 但我需要从另一个应用程序调用它。已调用视图,但获取错误: TemplateDoesNotExist at /cuentas/ingreso/ scolarte/templates/scolarte/registration/signup.html 我

我正在考虑在我的项目中组织所有模板:scolarte

根据这一问题的建议:

如果你想不出一个明显的地方来放置你的模板,我们 建议在Django项目中创建模板目录 i、 例如,在您在第2章中创建的mysite目录中,如果您 我们一直在跟随我们的例子

但我需要从另一个应用程序调用它。已调用视图,但获取错误:

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'