【问题标题】:Django template and versionDjango 模板和版本
【发布时间】:2018-06-30 09:30:17
【问题描述】:

我在网上搜索了 Django 的最新版本,在 Django 官方文档中它是 2.0.6。但是官方页面上给出的版本只有 2.0、2.1、1.9 等。所以我只是想知道 2.0 的文档是否适用于 2.0.5、2.0.6、2.0.7 等所有版本。因为有没有 2.0.6 版的文档。但是 2.0 版本又是不同的,它可以通过 pip 安装。

之前我使用的是 Django 2.0.6,但我遇到了模板问题。我首先使用名称 web 开始我的项目,然后制作了一个名为 music 的应用程序。在其中我创建了一个模板目录和另一个音乐文件夹,并将我的 index.html 文件放在其中。所以总的来说这条路是这样的 网页/音乐/模板/音乐/index.html。现在我正在使用 django.shortcuts 的渲染。

我在 music 目录的 view.py 文件中将 index.html 文件作为 music/index.html 引用。但它无法找到该文件,它只是显示错误。

我认为这可能是版本问题。

【问题讨论】:

    标签: django templates


    【解决方案1】:

    你的文件夹结构应该是这样的:

    music/                  <-- higher level folder
     |-- myproject/             <-- django project folder
     |    |-- __init__.py
     |    |-- settings.py
     |    |-- urls.py
     |    |-- wsgi.py
     |-- templates         <-- Templates folder
     |    |-- music
     |    |    |-- index.html
     |-- static            <-- Static folder
     |    |-- css
     |    |-- js
     |    |-- images
     |    +-- manage.py
     +-- venv/                  <-- virtual environment folder
    

    您的项目文件夹、应用程序文件夹和模板文件夹应与您的 ma​​nage.py 一起。

    您还需要将此添加到您的 settings.py 中

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR, "templates")],       <-- add this line
            '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',
                ],
            },
        },
    ]
    

    views.py

    def index(request):
         return render(request, "music/index.html", )    <-- Dont forget this here music is your folder's name
    

    【讨论】:

    • 为什么你将 myproject 文件夹包含了 3 次。它应该只来2次。一个作为项目,一个作为应用或主页
    • 但在官方文档中提到要在我们的应用程序中创建一个模板文件夹,该文件夹在文档中是民意调查,这里是音乐。在其中创建另一个音乐文件夹并将 index.html 放在其中。所以整个路径变成了project/app/template/app/index.html。我们必须将其引用为 app/index.html,因为 django 默认会看到模板文件夹。此外,我们不需要对设置进行任何更改。文档中没有关于 settings.py 文件中的任何更改的任何内容。你能解释一下区别吗
    • 不,它不像 project/app/template/app/index.html。 docs.djangoproject.com/en/2.0/intro/tutorial03/… 你的模板文件夹应该在路径 music/templates/music/index.html 这里首先音乐是你的 project/templates/app/index.html。应用程序和模板应该在您的项目文件夹中。
    【解决方案2】:

    您是否已将模板目录添加到 settings 文件中?

    作为documentation says

    假设您尝试覆盖名为 blog 的第三方应用程序的模板,该应用程序提供模板 blog/post.html 和 blog/list.html。您项目的相关设置如下所示:

    import os 
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
     INSTALLED_APPS = [ ..., 'blog', ..., ] 
    TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': True, ... }, ] 
    

    如果您使用默认项目模板创建项目,则 TEMPLATES 设置和 BASE_DIR 将已经存在。需要修改的设置是 DIRS。

    这些设置假定您在项目的根目录中有一个模板目录。要覆盖博客应用的模板,请在模板目录中创建一个文件夹,并将模板文件添加到该文件夹​​:

    templates/ 
        blog/ 
            list.html 
            post.html 
    

    模板加载器首先在 DIRS 目录中查找模板。当博客应用中的视图请求 blog/post.html 和 blog/list.html 模板时,加载器将返回您刚刚创建的文件。


    因此,为了添加您自己的模板文件夹,您应该修改DIRS 设置。

    【讨论】:

    • 没有。我需要这样做吗。怎么样?
    猜你喜欢
    • 2011-05-14
    • 2021-03-25
    • 2010-11-09
    • 2012-06-23
    相关资源
    最近更新 更多