【问题标题】:Django not checking paths in DIRS for filesDjango 不检查 DIRS 中的文件路径
【发布时间】:2021-10-23 08:30:57
【问题描述】:

我的模板文件外面有一个文件夹,我想渲染我试过这个:

    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'projects')],
        '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',
            ],
        },
    },
]

它不起作用我想像这样渲染它: return render(request, f"{username}/{name}/index.html")

请帮忙!快乐编码!

【问题讨论】:

  • 这意味着您对每个用户都有不同的模板?您可能想要更改 urls,并使用 same 模板呈现它。

标签: python django django-templates frameworks


【解决方案1】:

我认为您对模板的工作方式存在一些误解。模板是 Django 可以用来渲染内容到 HTTP 响应的文件。但这与最终呈现该视图的 URL无关

一个视图可以呈现零个、一个或多个模板,并且最终应该简单地返回一个 HTTP 响应,不管是否有一个模板可以帮助完成该任务。

因此,您可以定义如下所示的 url 模式:

urlpatterns = [
    # …,
    path('<str:username>/<str:name>/index.html', some_view, name='some-name'),
    # …,
]

然后使用视图渲染一些模板:

from django.http import HttpResponse

def some_view(request, username, name):
    # …
    return HttpResponse(f'Hello {username}')

因此,这个简单的视图不使用任何模板,只是用'Hello <i>username</i>' 响应。如果您渲染模板,那么这些不必使用与 URL 相同的文件名,您可以使用 render(…) [Django-doc] 渲染模板,从而更容易生成更复杂的 HTML,但根本不需要模板。

如果您因此定义了一个模板,那么通常您在<i>app_name</i>/templates/<i>app_name</i>/ 目录中执行此操作,并且视图通常对同一视图的所有调用使用相同的模板(尽管这也不是必需的)。例如,如果您的应用名为users,您可以在users/templates/users/index.html 中制作模板,然后使用以下命令渲染视图:

from django.shortcuts import render

def some_view(request, username, name):
    # …
    return render(request, 'users/index.html', {'username': username, 'name': name})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 2021-06-14
    • 2013-03-05
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 2017-02-11
    相关资源
    最近更新 更多