是否可以在 django 项目的根目录提供静态 html 页面?

Posted

技术标签:

【中文标题】是否可以在 django 项目的根目录提供静态 html 页面?【英文标题】:Is it possible to serve a static html page at the root of a django project? 【发布时间】:2015-08-19 10:38:23 【问题描述】:

我在 pyhtonanywhere 上托管了一个 django 应用程序。该应用程序位于username.pythonanywhere.com/MyApp。我想在username.pythonanywhere.com 提供一个静态 html 页面。这可能吗?本质上,它将用作链接到/MyApp/MyApp2 和其他未来应用程序的索引。

我似乎找不到有关如何执行此操作的任何信息,但我认为我必须修改 mysite/mysite/urls.py,因为导航到 root 目前给我一个 404 并显示有关未能在 url 中找到匹配项的消息。

urlpatterns = [
        url(r'^/$', ???),
        url(r'^admin/', include(admin.site.urls)),
        url(r'^MyApp/', indluce('MyApp.urls')).
]

前一个是我最好的猜测(我知道一个不好的猜测)。那应该(如果我错了,请纠正我)与根 URL 匹配,但我不知道怎么说“嘿 django 只是查找一个静态文件”,或者该静态 html 应该在哪里,或者如何告诉 django 它在哪里生活。

尽量不要砍掉我的头。我是 django 的新手。

附:我在 PA 上的 virtualenv 中使用 django 1.8

【问题讨论】:

【参考方案1】:

当然可以。在我只需要渲染模板的情况下,我使用TemplateView。示例:

url(r'^$', TemplateView.as_view(template_name='your_template.html'))

我通常从 mostleast 来排序我的 URL 模式,以避免意外匹配:

from django.views.generic import TemplateView

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^MyApp/', include('MyApp.urls')),
    url(r'^$', TemplateView.as_view(template_name='your_template.html')),
]

至于 Django 在哪里查找模板,由您的配置来告诉 Django 在哪里查找:https://docs.djangoproject.com/en/1.8/topics/templates/#configuration

【讨论】:

而 html 文件位于 mysite/mysite/templates/? 它位于您在配置中DIRS 值中指定的任何位置,这是一个目录路径列表。 啊没有看到文档链接的最后一点。谢谢楼主! 我不确定这是否是一个真正的静态文件。通常,静态文件是直接来自应用程序服务器的服务器文件,例如 Apache,而不是来自框架的文件。虽然我很确定这里的解决方案是 OP 想要的,但并不是说它实际上使有问题的文件成为静态的。 @user405205​​4 我明白你在说什么,但也完全有可能 OP 问题中的模板文件不包含任何 Django 模板标签。至少这是我在回答这个问题时所做的假设。【参考方案2】:

在 PythonAnywhere 上,您可以使用 Web 应用程序的静态文件工具在静态文件到达 Django 之前为其提供服务:

将名为 index.html 的文件放入目录中,然后将静态文件条目指向该目录。如果静态文件的 URL 是 / 并且目录是包含 html 文件的目录,则文件将在 / 处提供。

请注意,您不希望该目录位于您的任何代码之上,否则您会将您的代码公开为静态文件,即如果您的代码位于 / 中,您不想使用目录 /somewhere/blah某处/blah/code,你会想把它放在/somewhere/no_code_here

【讨论】:

【参考方案3】:

我一直在修改 Django 版本 3.2,在创建 Django 应用程序后,我能够在项目的根目录中提供静态 HTML 页面,就像在他们的官方教程中一样,在根 urls.py 文件中如下所示:

from django.views.generic import TemplateView

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
    path('', TemplateView.as_view(template_name='home/base.html')),
]

假设home/base.html 放置在默认模板文件夹所在的位置。例如,如果我只是重新使用polls 模板目录,我可以创建一个类似polls/templates/home/ 的文件夹来存储base.html

【讨论】:

以上是关于是否可以在 django 项目的根目录提供静态 html 页面?的主要内容,如果未能解决你的问题,请参考以下文章

Python全栈开发之Django进阶

5第十 - WEB开发进阶 - Django静态文件应用

如何通过 HTTPS 提供 Django 静态文件?

django中怎么载入css等静态文件

django之管理静态文件

[Django学习]静态文件处理