django呈现一个空白页面

时间:2013-04-01 01:13:22

标签: django django-templates django-views django-inheritance

首先,我想承认,我是Django的新手。我尽我所能地学习。我正在通过一本名为“Beginning Django E-Commerce”的书。如果不希望破坏版权,也许你们可以找出我出错的地方。 我正在使用Django 1.4.3,我正在使用的书可能是为Django 1编写的,可能是1.1,但是这里有。

我的base.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "XHTML1-s.dtd" >
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>{% block title %}{% if page_title %}{{ page_title }} - {% endif %}
            {{ site_name }}{% endblock %}</title>
    <meta name="keywords" content="{{ meta_keywords }}" />
    <meta name="description" content="{{ meta_description }}" />
</head>
<body>
    {% block site_wrapper %}{% endblock %}
</body>
</html>

我的catalog.html:

{% extends "base.html" %}

{% block site_wrapper %}
<div id="main">
    <a href="#content" class="skip_link">Skip to main content</a>
    <div id="banner">
            <div class="bannerIEPadder">
                    <div class="cart_box">
                            [link to cart here]
                    </div>
                    Modern Musician
            </div>
    </div>
    <div id="navigation">
            <div class="navIEPadder">
                    [navigation here]
            </div>
    </div>
    <div id="middle">
            <div id="sidebar">
                    <div class="sidebarIEPadder">
                            [search box here]
                    <br />
                            [category listing here]
                    </div>
            </div>
            <div id="content">
                    <a name=”content”></a>
                    <div class="contentIEPadder">
                            {% block content %}{% endblock %}
                    </div>
            </div>
    </div>
    <div id="footer">
            <div class="footerIEPadder">
                    [footer here]
            </div>
    </div>
</div>
{% endblock %}

我的index.html:

{% extends "catalog.html" %}

{% block content %}
    <h2>Welcome!</h2>
{% endblock %}

所有这些文件都存储在templates目录中。这本书建议我运行以下命令:

python manage.py startapp preview

并调整我的urls.py:

  

urlpatterns = patterns('',       ...       (r'^ catalog / $','preview.views.home'),)

调整预览目录下的views.py:

from django.shortcuts import render_to_response

def home(request):
  return render_to_response("index.html")

然后您应该能够看到一个页面:

  

跳至主要内容    [链接到购物车]    现代音乐家    [导航]    [此处搜索框]    [此处列出的类别]    欢迎!    [页脚]

然而,我得到的只是一个空白页面。任何人都可以找出原因吗? (这本书可能只是过时了)当我查看空白页的来源时。

实际上是base.html的空白渲染。在开发服务器中,我没有错误:

python manage.py runserver localhost:8000      (wd: ~/websites/ecomstore) 
Validating models... 0 errors found Django version 1.4.3, using settings 'ecomstore.settings' 
Development server is running at http://www.localhost.com:8000/ Quit the server with CONTROL-C. 
[01/Apr/2013 02:13:06] "GET /catalog/ HTTP/1.1" 200 352 
[01/Apr/2013 02:13:08] "GET /catalog/ HTTP/1.1" 200 352 
[01/Apr/2013 02:13:09] "GET /catalog/ HTTP/1.1" 200 352 
[01/Apr/2013 02:33:33] "GET /catalog/ HTTP/1.1" 200 352

full list of my steps, please see this site

3 个答案:

答案 0 :(得分:0)

尝试在 catalog.html base.html 中插入{%block content%},问题是因为您继承自目录&lt;基础,并且这些模板没有此阻止进行渲染。

答案 1 :(得分:0)

答案是问题是人为错误。我在代码中有一个类型,很可能是间距问题(遗憾的是我没有使用eclipse)。这个问题的答案很难在发布前仔细检查,或者你必须非常懊悔(像我一样!)。我要躲在我从下面爬出的django岩石下面! 快乐的编码!

答案 2 :(得分:0)

首先你应该告诉django你实际制作的应用程序存在。 转到setting.py并转到Installed_app并将您的应用包含在这里:

 INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'preview.apps.PreviewConfig',
]

然后你必须去主目录并运行urls.py并添加这个url:

from django.conf.urls import url,include
from django.contrib import admin

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

之后你要在预览文件夹中创建一个python文件并将其命名为urls.py.在那里你必须为你的预览应用定义你的url模板。

from django.conf.urls import url
from . import views


urlpatterns = [
url(r'^$', IndexView.as_view()),
]

最后一步是你必须定义视图。为了做到这一点,请转到previews文件夹中的views.py并运行views.py

from django.views.generic import TemplateView

class IndexView(TemplateView):
  template_name = "index.html"