在 Django 中显示静态页面

Posted

技术标签:

【中文标题】在 Django 中显示静态页面【英文标题】:Display static page in Django 【发布时间】:2014-05-13 02:35:08 【问题描述】:

我正在尝试在 Django 项目中显示静态页面的内容。

urls.py :-

from django.conf.urls import patterns, include, url 
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'spollow.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),
    (r'^$', 'django.views.generic.simple.direct_to_template', 'template': 'index.html'),
    url(r'^admin/', include(admin.site.urls)),
)

index.html 与 urls.py 位于同一目录中

我收到 500 个内部服务器错误。有什么想法我哪里出错了吗?

【问题讨论】:

正在调试吗?你能发布回溯吗? Django static page?的可能重复 【参考方案1】:

首先,来自 500 错误的堆栈跟踪表明该错误可能是什么?您可能正在使用 Django 1.6,并且不推荐使用对 direct_to_template 的调用。

在 Django 1.5 或更新版本上,您可以使用 TemplateView

Here's the example from the documentation

https://docs.djangoproject.com/en/dev/topics/class-based-views/

from django.conf.urls import patterns
from django.views.generic import TemplateView

urlpatterns = patterns('',
    (r'^about/', TemplateView.as_view(template_name="about.html")),
)

您可以在 Django 1.4 或更早版本

上使用 direct_to_template 视图

Here's the relevant documentation

https://docs.djangoproject.com/en/1.4/ref/generic-views/#django-views-generic-simple-direct-to-template

from django.views.generic.simple import direct_to_template

urlpatterns = patterns('',
    (r'^foo/$',             direct_to_template, 'template': 'foo_index.html'),
    (r'^foo/(?P<id>\d+)/$', direct_to_template, 'template': 'foo_detail.html'),
)

如果是后者,我会使用模块而不是字符串,(查看示例中的导入)。

除此之外,如果没有 500 个细节,它将在黑暗中拍摄,您可能没有正确的模板,或者不正确的路径,或者一百万种不同的东西。

注意事项

如果您只想提供静态页面,最好通过 django 前面的实际网络服务器(nginx、apache 等)来提供它们,特别是在您期望大量流量的情况下。

【讨论】:

【参考方案2】:

如果您的错误是由于找不到index.html

如果你的是app(即:由python manage.py startapp &lt;app&gt;创建)那么:

然后django会在&lt;app&gt;/templates目录下搜索模板文件,如果你在settings.py中添加了应用到INSTALLED_APPS

所以你需要在&lt;app&gt; 中创建一个文件夹templates 并将index.html 放入其中。

如果您没有任何apps,您想手动添加template path

打开settings.py,然后编辑TEMPLATE_DIRS

TEMPLATE_DIRS = (
    # Put the full path of the template dir here, like "/home/html/django_templates" or
    # "C:/www/django/templates". 
)

【讨论】:

【参考方案3】:

在 Django 1.5 或更高版本中,您可以使用 render 函数而不是 direct_to_template

from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
    url(r'^$', 'django.shortcuts.render', 'template_name': 'index.html'),
)

或者如果你喜欢更复杂的方式:),你可以使用基于类的TemplateView:

from django.conf.urls import patterns, include, url
from django.views.generic import TemplateView

urlpatterns = patterns('',
    url(r'^$', TemplateView.as_view(template_name="index.html")),
)

【讨论】:

以上是关于在 Django 中显示静态页面的主要内容,如果未能解决你的问题,请参考以下文章

django 改了静态文件但是页面没有变

在静态文件中加载图像

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

通过 django 提供静态文件时找不到页面

Django 2.11 静态页面404 解决

Django-在前端不显示 PDF 页面