【问题标题】:Display static page in Django在 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


【解决方案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")),
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-10
        • 1970-01-01
        • 2016-06-27
        • 2016-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-23
        相关资源
        最近更新 更多