【问题标题】:Same filename in differen Django apps opens the same template不同 Django 应用程序中的相同文件名打开相同的模板
【发布时间】:2017-07-19 13:31:18
【问题描述】:

目前我创建了一个 Django 网站。我创建了一个应用程序。

project
--app
----templates
------index.html
----url.py
----views.py
--project
----templates
------index.html
----url.py
----views.py

在两个 url.py 中,我创建了 url-pattern url(r'^', views.index, name="index"),,并且项目中的 url.py 文件包含 url(r'^heatingControll/', include('heatingControll.urls')),

在两个视图中我都添加了函数:

def index(request):
    template = loader.get_template('index.html')
    context = {}
    return HttpResponse(template.render(context, request))

据我了解,Django 将通过运行 127.0.0.1:8000/app 从 app/template 文件夹打开 index.html,并通过运行 127.0.0.1:8000 从 index.html 文件夹打开 index.html

但每次app/templates/index.html 文件都会运行。

我坚信应该可以在多个应用程序中使用相同的目录名称。

我的问题可能是什么?

【问题讨论】:

  • 您应该在模板文件夹中使用您的应用程序名称创建一个文件夹。在此文件夹中放置 html 模板。在视图中,您称它们为appName/index.html。查看此链接或您可以在该主题上找到的任何其他链接revsys.com/blog/2014/nov/21/recommended-django-project-layout

标签: python django django-urls


【解决方案1】:

不,它不是这样工作的。您需要为模板命名,即使它们位于应用程序中。

--app
----templates
------app
--------index.html

或者,只保留单个项目级模板文件,但仍使用命名空间:

--project
----templates
------index.html
------app
--------index.html

无论哪种方式,您现在都将模板引用为"app/index.html"

注意,你真的应该使用render 快​​捷方式:

def index(request):
    context = {}
    return render(request, 'app/index.html', context)

另外请注意,通常不会有项目级别的views.py。通常会在应用程序中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 2019-05-09
    相关资源
    最近更新 更多