我通过了一个非常好的教程(Django Girls)。在Django的本地服务器上完美运行。
只要网页是静态的,它也可以在Heroku上完美运行。但是,一旦我使用模板填充三个简单的项目,它就不会像在本地Django服务器上那样呈现它们。
我一直在安装/使用whitenoise,遵循Heroku网站上的建议等等。所有这一切都是因为管理控制台看起来很漂亮(它已经像一个网页一样呈现非常低的带宽 - 没有实际的图形魅力,只有带下划线的文本)。因此,使用whitenoise似乎在那里有效。
但是在我的家庭酿造页面上,当我查看从Heroku发送到浏览器的HTML时,它包含所有各种标签等,但没有任何内容。
正如我所说的那样,因为它在本地服务器上工作正常。我已经尝试更改{%include static%} tp {%include staticfiles%},我已经运行了' collectstatics'成功,我已插入所有whitenoise和heroku推荐的代码。
模板非常简单:
{% load staticfiles %}
<html>
<head>
<title> My Blog</title>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0>/css/bootstrap.min.css">
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
<link rel="stylesheet" href="{% static 'css/blog.css' %}">
</head>
<body>
<div>
<h1><a href="/">My Test Blog</a></h1>
</div>
<div class="content container">
<div class="row">
<div class="col-md-8">
{% for post in posts %}
<div class="post">
<h2<a href="">{{post.title}}</a></h2>
<div class="date"><p>published: {{post.published_date }}</p></div>
<p>{{ post.text|linebreaksbr|linebreaksbr }}</p>
</div>
{% endfor %}
</div>
</div>
</div>
</body>
</html>
调用代码传入一个好的字典,因为它在本地渲染得很好。然而,Heroku上的远程实现所带来的东西已经被剥离了#39;模板中的信息很多,但不是全部。它看起来像这样:
<html>
<head>
<title>My Blog</title>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
<link rel="stylesheet" href="/static/css/blog.css">
</head>
<body>
<div>
<h1><a href="/">My Test Blog</a></h1>
</div>
<div class="content container">
<div class="row">
<div class="col-md-8">
</div>
</div>
</div>
</body>
</html>
如果你想看到它,这就是本地网络服务器的内容,所有这些都完全正确:
<html>
<head>
<title>My Blog</title>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
<link rel="stylesheet" href="/static/css/blog.css">
</head>
<body>
<div>
<h1><a href="/">My Test Blog</a></h1>
</div>
<div class="content container">
<div class="row">
<div class="col-md-8">
<div class="post">
<h2<a href="">Here is post 1</a></h2>
<div class="date"><p>published: Aug. 21, 2017, 4:44 p.m. </p></div>
<p>This is the etxt for the first post</p>
</div>
<div class="post">
<h2<a href="">2nd post</a></h2>
<div class="date"><p>published: Aug. 21, 2017, 4:44 p.m. </p></div>
<p>If one is not enough, here is #2...</p>
</div>
<div class="post">
<h2<a href="">3rd post</a></h2>
<div class="date"><p>published: Aug. 21, 2017, 4:44 p.m. </p></div>
<p>And yet one more....</p>
</div>
</div>
</div>
</div>
</body>
</html>
显然,它获得了相同的调用代码,但是如果您想知道:
from django.shortcuts import render
from django.utils import timezone
from .models import Post
def post_list(request) :
posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
return render(request,'blog/post_list.html', {'posts' : posts})
通常一个人怀疑版本不一致,但使用requirements.txt以及virtualenv似乎可以消除大部分问题。管理控制台的信息看起来完全相同,所以它有点奇怪,因为人们会怀疑Django本身在这两个平台上不会有完全不同的行为,特别是在完成Heroku为使用whitenoise所做的所有步骤之后, Heroku否则收集静态或运行代码没有问题 - 它肯定会找到模板但无法填写它。